Windows에서 최신 파일을 유지하면서 디렉토리에서 오래된 파일을 어떻게 삭제합니까?
-
09-06-2019 - |
문제
가능한 중복:
N일보다 오래된 파일을 삭제하는 배치 파일
2주가 지난 디렉터리에서 모든 파일을 삭제하는 예약된 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
un*x와 같은 명령을 사용하기 위해 cygwin 도구를 다운로드하거나 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 명령에 대해서도 일부 플래그를 지정해야 할 수도 있습니다.:)
편집하다:해야 한다는 것을 깨달았습니다. Microsoft에서 자료 다운로드 FORFILES가 작동하려면.나는 특별한 것이 필요하지 않기 때문에 허용된 솔루션도 좋아합니다.유일한 문제는 14일보다 오래된 모든 항목을 제거하기 위해 매일 프로세스를 실행하는 대신 2주에 한 번만 발생한다는 것입니다.그만한 가치가 있습니다.:피
배치 파일이나 Powershell 스크립트를 작성하고 예약해 보는 것은 어떨까요?
스크립트 지정된 날짜보다 오래된 파일을 삭제하려면
서버에 Perl(또는 유사한)이 설치되어 있는 경우 수행하는 것은 매우 간단합니다.
#!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: $!";
}
집에 아이들이 있을 수 있으므로 실제로 삭제를 수행하는 줄은 주석 처리되어 있습니다. :)