Vuoto significa vuoto. Se esiste un tipo di file in una directory, la directory non è vuota. Illustrare:
$ 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
Quindi, abbiamo una directory con un link simbolico funzionante, una con un link non funzionante (che punta a un file inesistente), una con un FiFo (una named pipe), una con un file vuoto, una con un file che non lo è vuoto, uno con un file nascosto, uno con una sottodirectory e solo uno vuoto. Quale verrà eliminato?
$ 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!
Quindi, sono state eliminate tre cose:
- La directory vuota
dir8
.
- La (sotto) directory vuota
dir7/subdir
- La directory (ora) vuota
dir7
. Questo è stato eliminato perché find
prima è stato eliminato dir7/subdir
e quindi dir7
era vuoto, quindi è stato eliminato anche.
Pertanto, qualsiasi tipo di contenuto in una directory impedirà che venga eliminato da questo comando, ma è necessario fare attenzione nel caso in cui l'unica cosa in una directory siano altre directory vuote. In tal caso, il find
comando eliminerà anche la directory principale poiché sarà vuota al termine.
Se non vuoi rimuovere le sottodirectory che potrebbero causare la rimozione di un genitore, con GNU find (il default su Linux) puoi usare il -maxdepth
flag per limitare find
solo alla directory corrente:
$ 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!