백업을 생성하고 오래된 백업을 삭제하는 스크립트가 있습니다. 다음 줄이 있습니다.
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 {} \;
어떤 경우에는(항상 그런 것은 아님) 상황이 이 순서대로 발생합니다.
find
그것을 알아차리고/a/b
참석 하고 기억할 것입니다./a/b/c
- 시작되면 및 가
rm -rf /a/b
모두 삭제됩니다./a/b
/a/b/c
- 파일이 사라진 것을 알지 못하고
/a/b/c
(존재하지 않는) 파일을 삭제하려고 시도하면 오류가 발생합니다.
가능한 해결책:
- 할 수 있는 일: 정규식을 사용하여
No such file or directory
out으로 끝나는 줄을 필터링하세요. - 무엇이 더 좋을지: (
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
알 수 있습니다 .