특정 날짜 이전에 생성된 모든 파일 삭제

특정 날짜 이전에 생성된 모든 파일 삭제

나는 많은 수의 파일(예: 연중 매일의 로그)이 있는 디렉토리를 가지고 있습니다. 2011년 22월 22일 이전에 생성된 모든 파일을 삭제하고 싶습니다. 어떻게 해야 하나요? findexec를 사용해야 하나요 -rm? ksh를 사용하고 있습니다.

답변1

을 사용하는 것이 find여전히 파일을 삭제하는 데 선호되는 방법입니다. 바라보다http://mywiki.wooledge.org/UsingFind더 알아보기.

한 가지 방법은 타임스탬프가 포함된 파일을 만드는 것입니다. 예를 들어

touch -t 201311220000 /tmp/timestamp

find이제 타임스탬프와 일치하는 GNU 파일을 삭제합니다(현재 디렉터리에 있다고 가정). 예:

find . -type f ! -newer /tmp/timestamp -delete  

또는 비 GNU 조회

find . -type f ! -newer /tmp/timestamp -exec rm {} \;

답변2

GNU 또는 일부 BSD의 경우 find:

find . ! -newermt 2013-11-22 ! -type d -delete

파일의 마지막 수정 시간을 확인합니다. 일부 BSD에서는 -newerBtin을 대신 사용하여 -newermt파일의 inode를 확인할 수 있습니다.태어나다시간이 있다면.

정확히 2013-11-22 00:00:00.0000000000에 생성된 파일도 삭제됩니다. 시계가 그렇게 정확한 것은 아니지만, 이는 임의로 타임스탬프가 지정된 파일(예: using touch -d 2013-11-22T00:00:00 some-file(또는 touch -d 2013-11-22일부 touch구현))에 문제를 일으킬 수 있습니다. 언제든지 ! -newermt '2013-11-21 23:59:59.999999999999'(GNU) 또는 (BSD) 로 변경할 수 있지만 ! -newermt '2013-11-21 23:59:59'이렇게 하면 2013년 11월 21일 마지막 초에 마지막으로 수정된 파일이 누락됩니다.

답변3

find /path/to/directory/ -mtime +<number of days> -name '<file name>' -exec rm -rf {} \;

예:

find /Netap_fileshare_backup/SQL/DB_backups/xeo/ -mtime +15 -name 'ORA_XEO*' -exec rm -rf {} \;

이 경우 "ORA_XEO"로 시작하고 15일이 지난 모든 파일이 삭제됩니다.

관련 정보