이 명령이 예상대로 파일을 삭제하지 않는 이유는 무엇입니까?

이 명령이 예상대로 파일을 삭제하지 않는 이유는 무엇입니까?

내 스크립트의 이 명령 .sh~해야 한다/home/backup/VBtest파일을 찾고 .sql.gz5일이 지난 파일을 삭제합니다.

find /home/backup/VBtest/*.sql.gz -mtime +5 -exec rm {} \;

그러나 그것은 진실이 아니다. 아무런 경고나 오류도 표시하지 않고 소리 없는 실패만 표시합니다. CentOS 6.6에서 실행 중입니다.

편집하다-댓글에서 추천을 받은 후, 저도 이것을 시도해 find '/home/backup/VBtest' -name '*.sql.gz' -mtime +5 rm {} \;보고 얻었습니다 find: paths must precede expression: rm. 또한 파일 생성 시간(파일 수정 시간 기준)에 대한 매개변수는 무엇입니까?

답변1

다음과 같아야 합니다.

find /home/backup/VBtest/  -name '*.sql.gz' -mtime +5 # -exec rm {} \;

(올바른 결과가 나오면 exec 부분에서 #을 제거하십시오.) 이는 전체 디렉토리 트리를 스캔합니다.

/home/backup/VBtest/*.sql.gz그 자체는 쉘 확장이 될 것입니다(위의 find 명령과 -max깊이 1을 사용하는 것과 거의 동일함). 다음을 수행하여 배울 수 있습니다.

echo /home/backup/VBtest/*.sql.gz 

원하는 경우 순수 쉘 경로로 이동할 수 있습니다. 모든 posix 쉘은 타임스탬프를 비교할 수 있으므로( [+ -nt는 "보다 최신" 또는 -ot"이전"을 의미) 참조 타임스탬프만 필요하고 다음과 같이 확장된 glob을 필터링합니다.

touch /tmp/5dAgo --date '5 days ago'
trap 'rm -f /tmp/5dAgo' exit
for file in /home/backup/VBtest/*.sql.gz; do
   #remove the echo if this give the expected results
   [ "$file" -ot /tmp/5dAgo ] && echo rm "$file" 
done

답변2

맨 페이지 find:

    Numeric arguments can be specified as

   +n     for greater than n,
   -n     for less than n,
    n     for exactly n.

  -mtime n
          File's data was last modified n*24 hours ago.  See the comments for 
          -atime to understand how rounding  affects  the  interpretation  of
          file  modification times.

   -atime n
          File was last accessed n*24 hours  ago.   When  find  figures  out  
          how  many 24-hour  periods  ago  the  file  was  last  accessed, any 
          fractional part is ignored, so to match -atime +1, a file has to have 
          been accessed at least two days ago.

그러면 -mtime +5해당 파일이 발견됩니다.마지막 변경5×24시간 이상이전에 -mtime -5마지막으로 수정된 파일을 찾습니다.더 적은5*24시간 전보다. 파일을 수정한 경우 명령으로 해당 파일이 삭제되지 않는다는 점을 분명히 명시하고 있습니다. 명령을 다음과 같이 변경할 수도 있습니다.

find /home/backup/VBtest/ -maxdepth 1 -name "*.sql.gz" -mtime +5 -exec rm {} \;

관련 정보