Unixで空のディレクトリを見つける方法

Unixで空のディレクトリを見つける方法

シェルスクリプトを使用して、私のホームディレクトリの下にあるすべての空のディレクトリを表示したいと思います。コードを見つけるのに役立ちますか? (find'を使用しないでください-empty

答え1

GNUの使用find:

find ~ -type d -empty

(これはホームディレクトリから始まり、空のディレクトリを探します)。

答え2

-emptyあなたの発見にフラグがない場合(例:frombusboxなどPOSIX互換find)、これを行う必要があります(@からインスピレーションを得ました)。ヨルダン~の回答)、使用bash

find . -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; 
  a=("$1"/*); [[ ${a[@]} ]] || printf "%s\n" "$1"' sh {} \;
  • -type dディレクトリのみを探す
  • -exec bash -c '...' sh {} \;見つかった各ディレクトリに対してbashシェルを呼び出します。
    • shopt -s nullglob; shopt -s dotglobこのbash場合、nullglob一致するものがないと、bashがパターンを返さないようにすることができます。dotglobドット()で.始まるファイルとディレクトリを含みます。
    • a=("$1"/*)$a処理ディレクトリ内のすべての項目で配列を入力します。
    • [[ ${a[@]} ]]その項目が含まれていることを確認してください$a。そうでなければ...
    • printf "%s\n" "$1"ディレクトリ名の印刷

リストをさらに処理するには、エントリをnullバイトで区切る必要があります。

find . -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; 
      a=("$1"/*); [[ ${a[@]} ]] || printf "%s\0" "$1"' sh {} \; | xargs -0 ...

答え3

空のディレクトリを探したい場合存在するホームツリーの下のすべての空のディレクトリを除くホームディレクトリでは、GNUを使用できますfind

find ~ -maxdepth 1 -type d -empty

関連情報