나는 많은 수의 파일(예: 연중 매일의 로그)이 있는 디렉토리를 가지고 있습니다. 2011년 22월 22일 이전에 생성된 모든 파일을 삭제하고 싶습니다. 어떻게 해야 하나요? find
exec를 사용해야 하나요 -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에서는 -newerBt
in을 대신 사용하여 -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일이 지난 모든 파일이 삭제됩니다.