NAS에서 일부 파일을 찾은 다음 5일이 지난 파일/폴더를 삭제하려고 합니다. find 명령을 사용할 수 있습니다.
find /volume1/docker/UV/videos -type f -print
그런 다음 비디오 폴더와 하위 디렉터리에서 모든 파일을 가져옵니다.
하지만 내가 시도하면:
find /volume1/docker/UV/videos -mtime +2 -print
그런 다음 아무 일도 일어나지 않습니다. 2일보다 오래된 파일이 있다는 것을 알고 2를 1로 변경하면 동일한 일이 발생합니다.
따라서 2일보다 오래된 파일이 포함된 파일 및 하위 디렉터리 목록을 가져올 수 없습니다. 내가 원하는 것은 파일/폴더를 찾은 다음 -print를 -delete로 변경하는 것입니다. 그러나 -print를 사용하고 있으므로 결과가 어떻게 될지 알 수 있지만 결과는 아무것도 아닙니다.
누구든지 나를 도와주거나 안내할 수 있나요?
답변1
문제는 -atime
및 옵션 -ctime
이 -mtime
예상치 못한 반올림을 수행한다는 것입니다. 설명은 에 있어요man find
아래에 -atime
:
-atime n
마지막으로 액세스한 파일N *24시간 전. 언제
find
일치하는 소수 부분을 무시하고 파일에 마지막으로 액세스한 24시간 전 기간을 계산합니다.-atime +1
, 최소한 파일에 액세스한 적이 있어야 합니다.둘며칠 전.
최신 버전에는 대안이 있습니다 find
.
-mmin
(및 변형) 일 단위가 아닌 분 단위로 반올림됩니다. 따라서 -mmin "+$(( 60*24*2 ))"
2일 전 현재 시간을 기준으로 작업합니다.
-daystart
시간은 당일 00:00:00을 기준으로 측정됩니다. 이는 매우 부정확한 도구이며 명령줄의 옵션 순서에 민감합니다.
이러한 최신 확장 기능이 없는 시스템 find
(예: Solaris 또는 AIX)을 사용 중이거나 모든 관리 작업에 의무적인 자정 기한이 있고 실행될 때마다 다른 기한이 지정되는 것을 원하지 않는 경우 참조 파일을 사용하세요. 좋은 선택.
Paul--) touch -t 202009020301 FileToRetain
Paul--) touch -t 202009020300 FileOnCusp
Paul--) touch -t 202009020259 FileToDelete
Paul--)
Paul--) touch /tmp/myRefFile -t $( date -d '4 days ago' '+%Y%m%d0300' )
Paul--) ls -ltr /tmp/myRefFile .
-rw-r--r-- 1 paul paul 0 Sep 2 03:00 /tmp/myRefFile
.:
total 0
-rw-r--r-- 1 paul paul 0 Sep 2 02:59 FileToDelete
-rw-r--r-- 1 paul paul 0 Sep 2 03:00 FileOnCusp
-rw-r--r-- 1 paul paul 0 Sep 2 03:01 FileToRetain
Paul--) find . -type f ! -newer /tmp/myRefFile -delete
Paul--) ls -ltr /tmp/myRefFile .
-rw-r--r-- 1 paul paul 0 Sep 2 03:00 /tmp/myRefFile
.:
total 0
-rw-r--r-- 1 paul paul 0 Sep 2 03:01 FileToRetain
Paul--)
참조 파일은 정리 중인 디렉터리에 있어서는 안 되며(재미있는 순간에 자체적으로 삭제될 수 있음), 프로덕션에서는 사용하기 전에 mktemp
동시 사용 문제를 방지하기 위해 PID를 사용하거나 이름의 일부로 PID를 포함해야 합니다 rm
.
물론 현대차가 없다면 find
아마 그럴 수도 없을 것입니다 date -d
. 내 관리 작업은 월 단위이므로 Solaris에서는 월말이나 윤년이 아닌 월/연도 오버플로를 스크립트해야 합니다. 그냥 dd=01로 설정하면 됩니다. 그러나 특정 요일이나 월에 자신을 맞추는 것도 find
깨끗하게 수행할 수 없는 또 다른 일입니다. date -d 'last Sunday 06:00'
참조 문서가 되는 것이 도움이 됩니다.
답변2
find path -type f -daystart -mtime +5 -exec rm -rvf {} \;