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(名前付きパイプ)があるディレクトリ、空のファイルがあるディレクトリ、存在しないファイルが空のディレクトリです。があります。隠しファイル用で、1つはサブディレクトリ用で、1つだけが空です。どちらが削除されますか?
$ 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!
したがって、次の3つが削除されました。
- 空のディレクトリ
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!