空のフラグを持つ空のフォルダのみを削除してください。安全でしょうか?

空のフラグを持つ空のフォルダのみを削除してください。安全でしょうか?

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つが削除されました。

  1. 空のディレクトリdir8
  2. 空(サブ)ディレクトリdir7/subdir
  3. (現在)空のディレクトリdir7findまず削除されて削除され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!

関連情報