20,000を超えるファイル/サブディレクトリを含むすべてのディレクトリのリストを取得したいと思います。
たとえば、
Folder A
|_ Folder A1
|_ Folder A11
|_ 25,000 files
|_ 15,000 files
|_ Folder A2
|_ 21,000 files
|_ 10 files
次のリストを取得したいと思います。
Folder A11
Folder A2
どうすればいいですか?
答え1
ディレクトリ内の名前の数はを使用して計算できますset -- *
。次に、数を探します$#
。
を使用すると、コマンドを実行し、find
短いインラインシェルスクリプトでset
値をテストできます。$#
find . -type d -exec sh -c '
for dirpath do
set -- "$dirpath"/*
[ "$#" -gt 20000 ] && printf "%s\n" "$dirpath"
done' sh {} +
インラインsh -c
スクリプトは、見つかったディレクトリパス名を引数としてまとめて取得します。スクリプトはこれらのパス名の配置を繰り返し、*
各パス名のglobを拡張します。結果リストに20000を超える文字列が含まれている場合は、出力ディレクトリパス名が使用されますprintf
。
数隠されたbash
名前を使用すると、シェルオプションセットを使用してdotglob
シェル呼び出しに切り替えることができます。
find . -type d -exec bash -O dotglob -c '
for dirpath do
set -- "$dirpath"/*
[ "$#" -gt 20000 ] && printf "%s\n" "$dirpath"
done' bash {} +
ご希望の方は参考にしてくださいする上記のインラインスクリプトの一部としてこれを行う場合(話すのではなく、find
コマンドの出力を解析してみてください。):
find . -type d -exec bash -O dotglob -c '
for dirpath do
set -- "$dirpath"/*
[ "$#" -gt 20000 ] || continue
# Process "$dirpath" here
done' bash {} +