찾다. - exec rm -rf {} 및 파일을 찾을 수 없다는 이상한 메시지 [중복]

찾다. - exec rm -rf {} 및 파일을 찾을 수 없다는 이상한 메시지 [중복]

백업을 생성하고 오래된 백업을 삭제하는 스크립트가 있습니다. 다음 줄이 있습니다.

 find . -type d -mtime +29 -user admin -name "20*" -exec rm -rf {} \;

이러한 방식으로 29일 이상 백업된 디렉터리는 삭제됩니다. 이렇게 하면 디렉터리가 삭제되지만 다음 메시지가 매번 나타납니다.

find: `./2020-06-16-23-30': No such file or directory

(메시지의 날짜가 변경되었습니다)

이 메시지가 나타나는 이유와 스크립트 수정 방법을 알려주세요.

>/dev/null 2>&1실제 오류에 대한 메시지를 보고 싶기 때문에 출력 리디렉션( )을 사용하는 것은 나에게 적합하지 않습니다.

다음은 백업이 포함된 디렉터리 목록입니다.

$ cd /volume1/Backup && ls -l
drwxr-xr-x  2 admin users       4096 Jun 19 23:30 2020-06-19-23-30
drwxr-xr-x  2 admin users       4096 Jun 20 23:30 2020-06-20-23-30
drwxr-xr-x  2 admin users       4096 Jun 21 23:30 2020-06-21-23-30
drwxr-xr-x  2 admin users       4096 Jun 22 23:30 2020-06-22-23-30
drwxr-xr-x  2 admin users       4096 Jun 23 23:30 2020-06-23-23-30
drwxr-xr-x  2 admin users       4096 Jun 24 23:30 2020-06-24-23-30
drwxr-xr-x  2 admin users       4096 Jun 25 23:30 2020-06-25-23-30
drwxr-xr-x  2 admin users       4096 Jun 26 23:30 2020-06-26-23-30
drwxr-xr-x  2 admin users       4096 Jun 27 23:30 2020-06-27-23-30
drwxr-xr-x  2 admin users       4096 Jun 28 23:30 2020-06-28-23-30
drwxr-xr-x  2 admin users       4096 Jun 29 23:30 2020-06-29-23-30
drwxr-xr-x  2 admin users       4096 Jun 30 23:30 2020-06-30-23-30
drwxr-xr-x  2 admin users       4096 Jul  1 23:30 2020-07-01-23-30
drwxr-xr-x  2 admin users       4096 Jul  2 23:30 2020-07-02-23-30
drwxr-xr-x  2 admin users       4096 Jul  3 23:30 2020-07-03-23-30
drwxr-xr-x  2 admin users       4096 Jul  4 23:30 2020-07-04-23-30
drwxr-xr-x  2 admin users       4096 Jul  5 23:30 2020-07-05-23-30
drwxr-xr-x  2 admin users       4096 Jul  6 23:30 2020-07-06-23-30
drwxr-xr-x  2 admin users       4096 Jul  7 23:30 2020-07-07-23-30
drwxr-xr-x  2 admin users       4096 Jul  8 23:30 2020-07-08-23-30
drwxr-xr-x  2 admin users       4096 Jul  9 23:30 2020-07-09-23-30
drwxr-xr-x  2 admin users       4096 Jul 10 23:30 2020-07-10-23-30
drwxr-xr-x  2 admin users       4096 Jul 11 23:30 2020-07-11-23-30
drwxr-xr-x  2 admin users       4096 Jul 12 23:30 2020-07-12-23-30
drwxr-xr-x  2 admin users       4096 Jul 13 23:30 2020-07-13-23-30
drwxr-xr-x  2 admin users       4096 Jul 14 23:30 2020-07-14-23-30
drwxr-xr-x  2 admin users       4096 Jul 15 23:30 2020-07-15-23-30
drwxr-xr-x  2 admin users       4096 Jul 16 23:30 2020-07-16-23-30

답변1

이것은 경쟁 조건처럼 보입니다.

파일이 있다고 말하고 /a/b/c실행하십시오.find /a -exec rm -rf {} \;

어떤 경우에는(항상 그런 것은 아님) 상황이 이 순서대로 발생합니다.

  1. find그것을 알아차리고 /a/b참석 하고 기억할 것입니다./a/b/c
  2. 시작되면 및 가 rm -rf /a/b모두 삭제됩니다./a/b/a/b/c
  3. 파일이 사라진 것을 알지 못하고 /a/b/c(존재하지 않는) 파일을 삭제하려고 시도하면 오류가 발생합니다.

가능한 해결책:

  • 할 수 있는 일: 정규식을 사용하여 No such file or directoryout으로 끝나는 줄을 필터링하세요.
  • 무엇이 더 좋을지: ( echo먼저 앞에 배치하여 테스트 rm -rf):
find . -type d -mtime +29 -user admin -name "20*" > /tmp/list_of_dirs
perl -ne 'system("rm -rf $_") < /tmp/list_of_dirs
  • 내가 스스로 할 일: 나는 이것이 실제 문제라고 생각하지 않습니다. 특정 디렉토리가 손상 되면 rm알 수 있습니다 .

관련 정보