내 스크립트의 이 명령 .sh
은~해야 한다/home/backup/VBtest
파일을 찾고 .sql.gz
5일이 지난 파일을 삭제합니다.
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 {} \;