빈 플래그가 있는 빈 폴더만 삭제하세요. 안전할까요?

빈 플래그가 있는 빈 폴더만 삭제하세요. 안전할까요?

100분이 지난 빈 폴더만 삭제하려면 다음 명령을 생성합니다.

find /tmp -type  d -empty -mmin +100 -printf '%p was deleted!!\n' -delete

우리는 프로덕션 머신의 cron 작업에서 실행할 계획이므로

우리는 알고 싶습니다.비어 있는플래그는 링크가 있는 폴더나 빈 파일도 무시합니다.

아니면 폴더에 빈 플래그가 있는지 확인하는 방법은 무엇입니까?

답변1

공허함은 비어 있음을 의미합니다. 디렉토리에 어떤 유형의 파일이라도 있으면 디렉토리는 비어 있지 않습니다. 표시하려면:

$ mkdir dir{1..8}; \
  ln -s /etc/ dir1/workingLink; \
  ln -s noSuchFile dir2/brokenLink;  \
  mkfifo dir3/fifo; 
  touch dir4/emptyFile; \
  echo foo > dir5/nonEmptyFile; \
  touch dir6/.hiddenFile; \
  mkdir dir7/subdir
$ tree -a
.
├── dir1
│   └── workingLink -> /etc/
├── dir2
│   └── brokenLink -> noSuchFile
├── dir3
│   └── fifo
├── dir4
│   └── emptyFile
├── dir5
│   └── nonEmptyFile
├── dir6
│   └── .hiddenFile
├── dir7
│   └── subdir
└── dir8

따라서 우리는 작동하는 심볼릭 링크가 있는 디렉터리 하나, 끊어진 링크(존재하지 않는 파일을 가리키는)가 있는 디렉터리, FiFo(명명된 파이프)가 있는 디렉터리, 빈 파일이 있는 디렉터리, 존재하지 않는 파일이 비어 있는 디렉터리가 있습니다. 숨겨진 파일용이고, 하나는 하위 디렉터리용이고, 하나만 비어 있습니다. 어느 것이 삭제될까요?

$ find . -type d -empty -printf '%p WAS DELETED!\n' -delete \
                        -or -printf '%p: not empty!\n'
./dir8 WAS DELETED!
./dir3/fifo: not empty!
./dir3: not empty!
./dir5/nonEmptyFile: not empty!
./dir5: not empty!
./dir6/.hiddenFile: not empty!
./dir6: not empty!
./dir2/brokenLink: not empty!
./dir2: not empty!
./dir4/emptyFile: not empty!
./dir4: not empty!
./dir7/subdir WAS DELETED!
./dir7 WAS DELETED!
./dir1/workingLink: not empty!
./dir1: not empty!
.: not empty!

따라서 다음 세 가지가 제거되었습니다.

  1. 빈 디렉토리 dir8.
  2. 빈 (하위)디렉토리dir7/subdir
  3. (현재) 빈 디렉토리 dir7. find먼저 삭제되어서 삭제되었고 dir7/subdir, 그다음에는 dir7비어있어서 역시 삭제되었습니다.

따라서 디렉터리에 있는 모든 종류의 콘텐츠는 명령이 해당 콘텐츠를 삭제하는 것을 방지하지만 디렉터리에 다른 빈 디렉터리만 있는 경우에는 주의해야 합니다. 이 경우 find명령은 완료 시 비어 있게 되므로 상위 디렉터리도 삭제합니다.

상위 디렉터리가 삭제될 수 있는 하위 디렉터리를 삭제하지 않으려면 GNU find(Linux의 기본값)를 사용하여 이 플래그를 사용하여 현재 디렉터리만 현재 디렉터리 로 -maxdepth제한 할 수 있습니다.find

$ find . -maxdepth 1 -type d -empty -printf '%p WAS DELETED!\n' \
                                    -delete -or -printf '%p: not empty!\n'
./dir8 WAS DELETED!
./dir3: not empty!
./dir5: not empty!
./dir6: not empty!
./dir2: not empty!
./dir4: not empty!
./dir7: not empty!
./dir1: not empty!
.: not empty!

관련 정보