lsコマンドを使用してディレクトリファイルの数を繰り返し表示するにはどうすればよいですか? [閉鎖]

lsコマンドを使用してディレクトリファイルの数を繰り返し表示するにはどうすればよいですか? [閉鎖]

Ubuntuのbashからディレクトリをインポートし、ディレクトリ内ls -lahのファイル数を繰り返し表示するようにしたいと思います。つまり、ディレクトリとサブディレクトリのすべてのファイル数を計算したいと思います。

可能ですか?

ベストアンサー1

lsほとんどのUnixでは、このユーティリティの出力は通常表示にのみ適しているため、ここで使用する要求を無視しました。

以下では、withfindを使用して、bash現在のディレクトリの各サブディレクトリにある名前の数を再帰的に計算します。

find . -type d -exec bash -O nullglob -O dotglob -c '
    for dirpath do
        set -- "$dirpath"/*
        printf "%s:\t%d\n" "$dirpath" "$#"
    done' bash {} +

これはbashディレクトリパス名のバッチとして呼び出され、インラインスクリプトは指定されたバッチを繰り返し、*各バッチでワイルドカードパターンを展開します。シェルオプションを設定するnullglobと、dotglob名前リスト(おそらく非表示)に展開され、その$#リストの長さになります。

現在の作業ディレクトリの最上位ディレクトリ数だけを希望する場合:

shopt -s globstar nullglob dotglob
for dirpath in */; do
    set -- "$dirpath"/**
    printf '%s:\t%d\n' "$dirpath" "$#"
done

これ以上使用する必要がないことを除いて、ほぼ同じですfind**再帰を使用して各ディレクトリの下のすべての名前を繰り返し、以前のように結果を表示します。

実際にコードを少し変更して、まったく何もしなくfindても最初のコードを再作成できます。各ディレクトリの名前数を再帰的に取得します。

shopt -s globstar nullglob dotglob
for dirpath in **/; do
    set -- "$dirpath"/*
    printf '%s:\t%d\n' "$dirpath" "$#"
done

ある場所から別の場所にのみ移動したことに注意してください*

おすすめ記事