Synology NAS에서 30일이 지난 백업 파일을 삭제하려고 했습니다. 이 파일은 내 웹 서버에서 백업 파일을 다운로드하는 동안 생성된 디렉터리에 있습니다.
다운로드 후 -mtime을 확인한 후 기존 파일을 삭제하고 싶습니다.
스크립트는 다음과 같습니다.
#!/bin/sh
## Datum auslesen
datum=`date +%Y-%m-%d_%H-%M`
## Mit wget die Datei AutoBackupDB-1.zip laden und in einem Ordner mit Datum uns Uhrzeit speichern
wget -m -P /volume1/Austauschordner/backup_xyz/$datum/ ftp://backup:[email protected]/AutoBackupDB-1.zip
echo "Backup von xyz wurde erstellt! "
## finde alle Ordner in einem angegebenen Verzeichnis mit dem Suchnamen die älter als die angegebenen Tage sind und lösche diese
find /volume1/Austauschordner/ -type d -name 'backup_*' -ctime +30 -delete
이 스크립트를 실행하면 "디렉토리가 비어 있지 않습니다"라는 메시지가 표시되고 아무것도 삭제되지 않습니다.
디렉토리의 모든 항목을 삭제하는 쉬운 방법이나 옵션이 있습니까?
답변1
@Stephen Kitt가 언급했듯이 이것은 대부분 중복입니다.find -delete는 비어 있지 않은 디렉토리를 삭제하지 않습니다.이는 디렉토리를 삭제하라고 지시했지만 디렉토리가 비어 있지 않다는 것을 보여줍니다( rm some_nonempty_directory
-r 플래그 없이 실행하는 것은 적어도 작동하지 않습니다).
즉, or -delete
로 바꾸면 스크립트가 오류 없이 디렉토리를 재귀적으로 삭제해야 합니다( 테스트 후 자세한 출력을 원하지 않으면 해당 플래그를 제거하십시오).-exec rm -rv {} +
-exec rm -rv {} \;
v
참고: +
끝에 있는 것은 rm -rv file1 file2 ...
while 연산을 \;
발생 시킵니다.rm -rv file1; rm -rv file2; ...