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!
따라서 다음 세 가지가 제거되었습니다.
- 빈 디렉토리
dir8
. - 빈 (하위)디렉토리
dir7/subdir
- (현재) 빈 디렉토리
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!