20,000を超えるファイル/サブディレクトリを含むディレクトリのリストを取得します。

20,000を超えるファイル/サブディレクトリを含むディレクトリのリストを取得します。

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 {} +

おすすめ記事