파일이 삭제되었는지 확인

파일이 삭제되었는지 확인

저는 bash와 rsync를 사용하여 웹사이트의 백업을 생성하고 저장하고 있습니다. dd-mm-yyyy날짜 폴더 " " 에 저장합니다 .

나는 x일(현재는 2일이지만 더 길어질 예정)보다 오래된 폴더를 삭제하기 위해 다음 방법을 시도해 왔습니다.

find /path/to/files -type d -mtime +2 -name [0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9] -exec rm -rf {} \; -prune

위의 내용은 작동하지만 여기서 분명히 잘못된 일을 하고 있지 않은지 다시 확인하고 싶었습니다.

그런 다음 폴더가 발견되었는지, 폴더가 삭제되었는지, 삭제된 폴더가 무엇인지 확인하고 싶습니다.

이것이 올바른지 확인하기 위해 다음과 같이 간단한지 궁금합니다.

if find /path/to/files -type d -mtime +2 -name [0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9] -exec rm -rf {} \; -prune; then
   ...
fi

그런데 삭제된 폴더 경로를 출력하는 방법을 잘 모르겠습니다.

답변1

find파일 발견 여부에 관계없이 성공적으로 종료됩니다. 성공은 유효한 명령줄 인수 및 입력/출력 오류가 없는 것으로 정의됩니다. 일부 파일을 찾았는지 알고 싶다면 무언가를 인쇄하고 출력이 비어 있지 않은지 확인하십시오.

find찾은 파일의 이름을 인쇄 하려면 -print액션으로 삽입하세요 . 여러 작업을 연결할 수 있습니다(예 -print: 하나씩 배치하기 -exec만 하면 됩니다 ).-prune

find /path/to/files -type d -mtime +2 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -print -exec rm -rf {} \; -prune

에 전달된 패턴 주위에는 따옴표가 필요합니다 -name. 그렇지 않고 현재 디렉토리에 일치하는 파일이 있으면 쉘은 find패턴을 보기 전에 패턴을 확장합니다.

각 백업의 최상위 디렉터리 이름뿐만 아니라 삭제된 각 파일의 이름을 인쇄하려는 경우 Linux를 사용하는 경우(보다 정확하게는 GNU coreutils를 사용하는 경우) 이를 변경할 수 있습니다. -v플래그는 다음과 같습니다. 에 전달되었습니다 rm.

/path/to/files게시한 명령은 최상위 수준뿐만 아니라 모든 곳에서 일치하는 디렉터리를 반복적으로 찾습니다 . 그것이 당신의 의도인지는 잘 모르겠습니다. 예를 들어, 가장 최근의 백업을 보게 될 것입니다. 최상위 디렉토리만 일치시키려는 경우 가장 쉬운 방법은 를 전달하는 것입니다 -maxdepth 1. 그러면 그럴 필요가 없습니다 -prune.

find /path/to/files -maxdepth 1 -type d -mtime +2 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -print -exec rm -rf {} \;

또는 쉘 일치 디렉토리 이름을 지정하고 find일치하기 전에 적용하여 아무것도 반복하지 않도록 지시할 수 있습니다 -prune.

find /path/to/files/[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9] -prune -type d -mtime +2 -print -exec rm -rf {} \;

그러나 패턴과 일치하는 파일이 없거나 일치하는 파일이 너무 많아서 결합된 이름이 명령줄의 최대 길이를 초과하는 경우 오류가 발생합니다. 이 -maxdepth방법에는 이러한 단점이 없습니다.

삭제된 파일을 기록하려면 출력을 파일로 리디렉션하세요.

{
  echo "# Deletions on $(date)"
  find /path/to/files -type d -mtime +2 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -print -exec rm -rf {} \; -prune
  echo
} >>backup-deletions.log

잘못된 항목을 삭제할까봐 걱정된다면 삭제한 내용을 기록하면 너무 늦었을 때만 알 수 있습니다. 먼저 콘텐츠를 휴지통으로 이동한 다음 휴지통을 비워 단계적 삭제를 수행할 수 있습니다.

# Move things to trash. Use whatever criteria you want.
find /path/to/files -type d -mtime +2 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -exec mv {} /path/to/trash \; -prune
# Delete directories from the trash can if they were moved more than
# a week ago.
find /path/to/trash -mindepth 1 -maxdepth 1 -ctime +7 -exec rm -rf {} \;

관련 정보