찾기 및 rm 명령이 제외 목록을 따르지 않는 경우가 있습니다.

찾기 및 rm 명령이 제외 목록을 따르지 않는 경우가 있습니다.

어떤 상황에서도 삭제해서는 안 되는 디렉토리의 제외 목록을 포함하기 위해 7일 전에 수정된 find 및 rm -rf 디렉토리 목록을 실행 중입니다.

이것은 스크립트에서 발췌한 것입니다.

find [path-to-base-dir] -maxdepth 1 -type d ! -name [dir1] ! -name .snapshot \
! -name . ! -name [dir2] ! -name [dir3] ! -name [dir4] ! -name [dir5] ! -name [dir6] \
! -name [dir7] ! -name [dir8] ! -name [dir9] ! -name [dir10] ! -name [dir11] ! -name [dir12]\
 -mtime +7 -exec rm -rf {} \; -print

이는 일일 크론으로 예약됩니다. 대부분의 경우 이것은 잘 작동합니다. 그러나 어떤 날에는 제외 목록을 무시하고 모든 디렉터리를 삭제합니다. 어떻게 이런 일이 일어날 수 있습니까? 조건 목록은 매우 길기 때문에 모든 종류의 지연으로 인해 find 명령이 !name 조건을 무시할 수 있습니다..?

답변1

찾다기본 디렉터리 경로-최대 깊이 1 \
     -d 유형! -이름많은 예외\
     -mtime +7 -exec rm -rf {} \;

디렉토리가 실패할 수 있는 유일한 조건은 에 path-to-base-dir포함 하지 않는 경우 입니다 bunch-of-exceptions(포함하지만 정확히 일치하는 경우에만 일치합니다 ). .지난 7일 동안 디렉토리가 수정되지 않은 경우 삭제됩니다.path-to-base-dir.path-to-base-dir-mtime +7

find이 있으므로 제외 시작 디렉토리를 사용하십시오 .-mindepth-maxdepth-mindepth 1

답변2

[dir1]문자열을 따옴표로 묶으십시오. 그렇지 않으면 쉘은 괄호로 인해 문자열을 확장하려고 시도할 것입니다. 이는 현재 작업 디렉토리의 내용에 따라 성공할 수도 있고 실패할 수도 있습니다.

관련 정보