ディレクトリ内のファイル数を計算するためにwcにパイプするよりもきちんとした代替案はありますか?

ディレクトリ内のファイル数を計算するためにwcにパイプするよりもきちんとした代替案はありますか?

これにより、ls -1 target_dir | wc -lディレクトリ内のファイル数を取得できます。私はこれが少し問題があると思います。よりエレガントで簡潔な方法はありますか?

ベストアンサー1

bash 4+(サポートされているすべてのUbuntuバージョンで利用可能)を想定します。

num_files() (
    shopt -s nullglob
    cd -P -- "${1-.}" || return
    set -- *
    echo "$#"
)

呼び出すのはオプションですnum_files [dir]dirそれ以外の場合は、現在のディレクトリが使用されます。元のバージョンは隠しファイルをカウントしないため、隠しファイルも計算しません。必要に応じshopt -s dotglobて前にset -- *

元の例では、通常のファイルだけでなく、ディレクトリや他のデバイスも計算します。実際には、通常のファイル(通常のファイルへのシンボリックリンクを含む)のみが必要な場合はこれを確認する必要があります。

num_files() (
    local count=0

    shopt -s nullglob
    cd -P -- "${1-.}" || return
    for file in *; do
        [[ -f $file ]] && let count++
    done
    echo "$count"
)

GNU検索がある場合は、次のものもオプションです(ここには元のコマンドが実行しなかった隠しファイルが含まれていることに注意してください)。

num_files() {
    find "${1-.}" -maxdepth 1 -type f -printf x | wc -c
}

(一般ファイルへのシンボリックリンクも計算するには、これを変更してください-type)。-xtype

おすすめ記事