
シェルスクリプトを使用して、私のホームディレクトリの下にあるすべての空のディレクトリを表示したいと思います。コードを見つけるのに役立ちますか? (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