كيف يمكنني حذف الملفات القديمة من الدليل مع الاحتفاظ بأحدث الملفات على Windows [نسخة مكررة]
-
09-06-2019 - |
سؤال
التكرار المحتمل:
ملف دفعي لحذف الملفات الأقدم من N أيام
أرغب في تشغيل مهمة Windows مجدولة تحذف جميع الملفات من دليل مضى عليه أكثر من أسبوعين.
والسبب هو أن هذه هي سجلات IIS وTomcat التي تملأ الخادم الخاص بي، ولكنني أريد الاحتفاظ بأحدث السجلات في حالة حاجتي إلى التحقيق في مشكلة ما.
هل يعرف أحد طريقة سهلة للقيام بذلك؟
هتافات
نيجي
المحلول
بناء الجملة الدقيق: FORFILES /p d:\new /d -30 /m * /c "cmd /c del @file"
نصائح أخرى
إن أبسط طريقة هي تشغيل ملف .bat أسبوعيًا أو شهريًا.
cd \mylog\dir
mkdir archive
del /Q .\archive\*.log
move *.log .\archive
إذا كنت تريد شيئًا أكثر تعقيدًا، فراجع تنزيل أدوات cygwin لاستخدام أوامر un*x مثل، أو ربما ابحث في Powershell.
مع VBScript، مقتبس من إجابات البرمجة النصية
Dim fso, startFolder, OlderThanDate
Set fso = CreateObject("Scripting.FileSystemObject")
startFolder = "E:\temp" ' folder to start deleting (subfolders will also be cleaned)
OlderThanDate = DateAdd("d", -07, Date) ' 07 days (adjust as necessary)
DeleteOldFiles startFolder, OlderThanDate
Function DeleteOldFiles(folderName, BeforeDate)
Dim folder, file, fileCollection, folderCollection, subFolder
Set folder = fso.GetFolder(folderName)
Set fileCollection = folder.Files
For Each file In fileCollection
If file.DateLastModified < BeforeDate Then
' fso.DeleteFile(file.Path) # Modify this to delete after testing
WScript.StdOut.WriteLine (file.Path)
End If
Next
Set folderCollection = folder.SubFolders
For Each subFolder In folderCollection
DeleteOldFiles subFolder.Path, BeforeDate
Next
End Function
يمكنك تشغيل هذا البرنامج النصي باستخدام CScript
@ جايسون:فائدة لطيفة، FORFILES من مجموعة الموارد
جدولة ملف دفعي للتعامل مع هذا.
سيؤدي هذا السطر إلى حذف كافة الملفات (*.*) الموجودة في c:\mydirectory والتي مضى عليها أكثر من 14 يومًا:
FORFILES -pc:\mydirectory -s -m*.* -d-14 -c"DEL @FILE"
ضع ذلك في ملف نصي، وأعد تسميته إلى شيء مثل "deletefiles.bat" وقم بجدولة ذلك.
لم أختبر هذا، ولكن ينبغي أن يكون من السهل بما فيه الكفاية لمحاولة.
يحرر:إذا كنت تستخدم هذا، فتأكد من أنك تفهم ما يحدث - فالعلم -s يخبره بتكرار الدلائل الفرعية، وقد لا يكون هذا هو ما تريد حدوثه.قد تحتاج أيضًا إلى تحديد بعض العلامات لأمر DEL أيضًا.:)
يحرر:أدركت أنك بحاجة إلى ذلك تحميل الاشياء من مايكروسوفت لكي يعمل FORFILES.يعجبني الحل المقبول أيضًا، لأنه ليس من الضروري أن يكون لديك أي شيء خاص.المشكلة الوحيدة هي أن ذلك يحدث فقط كل أسبوعين بدلاً من تشغيل عملية يومية لإزالة كل الأشياء التي مضى عليها أكثر من 14 يومًا.لما يستحق ذلك.:ص
لماذا لا تكتب ملف دفعي أو برنامج بوويرشيل النصي وتجدوله؟
النصي لحذف الملفات الأقدم من تاريخ محدد.
من السهل جدًا القيام بذلك إذا كان لديك بيرل (أو ما شابه) مثبتًا على الخادم:
#!perl
foreach my $file (</path/to/logs/*.log>) {
next unless -M $file > 14;
print "Deleting $file...\n";
# unlink $file or die "Failed to remove $file: $!";
}
تم التعليق على السطر الذي يقوم بالحذف بالفعل، نظرًا لاحتمال وجود أطفال في المنزل :)