これにより、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