아래 명령을 작성하여 7 일보다 오래된 모든 파일을 삭제하지만 작동하지 않습니다.
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
이 파일들을 어떻게 제거 할 수 있습니까?
아래 명령을 작성하여 7 일보다 오래된 모든 파일을 삭제하지만 작동하지 않습니다.
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
이 파일들을 어떻게 제거 할 수 있습니까?
답변:
@Jos가 지적했듯이 name
와 사이에 공백이 없습니다 '*.gz'
. 또한 명령 사용의 가속화를위한 -type f
에서 명령 실행에 옵션을 F를 만 세틸.
따라서 고정 명령은 다음과 같습니다.
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;
find
: 찾는 UNIX 명령 F 세틸 / D irectories / 리터의 잉크 등/path/to/
: 검색을 시작할 디렉토리입니다.-type f
: 파일 만 찾습니다.-name '*.gz'
:로 끝나는 파일을 나열합니다 .gz
.-mtime +7
: 수정 시간이 7 일보다 오래된 것만 고려하십시오.-execdir ... \;
: 발견 된 각 결과에 대해에서 다음 명령을 수행하십시오 ...
.rm -- '{}'
: 파일을 제거하십시오. {}
찾기 결과가 이전 부분에서로 대체됩니다 어디 부분이다. 하이픈으로--
시작하는 파일에 대한 프롬프트 오류를 피하기 위해 명령 매개 변수의 끝을 의미합니다 .find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --
에서 사람 찾기 :
-print0
True; print the full file name on the standard output, followed by a null character
(instead of the newline character that -print uses). This allows file names that contain
newlines or other types of white space to be correctly interpreted by programs that process
the find output. This option corresponds to the -0 option of xargs.
다음과 같은 이유로 조금 더 효율적입니다.
rm file1 file2 file3 ...
반대로 :
rm file1; rm file2; rm file3; ...
-exec
방법 에서와 같이 .
대안적이고 빠른 명령은 다음 대신 exec의 +
종결 자를 사용하는 것입니다\;
.
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +
이 명령은 rm
파일을 찾을 때마다 대신 한 번만 실행 -delete
되며 현대에서 다음과 같이 옵션을 사용하는 것만 큼 빠릅니다 find
.
find /path/to/ -type f -mtime +7 -name '*.gz' -delete
-delete
마지막에 왜 똑바로 가지 않습니까? 왜 엉망 +
나 \;
?
찾기와 함께 파일을 조심스럽게 제거하십시오. -ls와 함께 명령을 실행하여 제거 할 대상을 확인하십시오.
find /media/bkfolder/ -mtime +7 -name '*.gz' -ls
. 그런 다음 기록에서 명령을 가져 와서 추가하십시오.-exec rm {} \;
찾기 명령으로 인한 피해를 제한하십시오. 하나의 디렉토리에서만 파일을 제거하려면 -maxdepth 1
찾기가 하위 디렉토리를 통과하거나 오타가있는 경우 전체 시스템을 검색하지 못합니다 /media/bkfolder /
.
내가 추가하는 다른 제한은보다 오래된 이름을 -name 'wncw*.gz'
추가하고 -mtime -31
검색 된 디렉토리를 인용하는 것과 같은보다 구체적인 이름 인수 입니다. 정리를 자동화하는 경우 특히 중요합니다.
find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;
name
와 사이에 공백이 있어야합니다'*.gz'
.