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 findがある場合、次のようなオプションもあります(これには、元のコマンドでは実行されなかった隠しファイルが含まれます)。
num_files() {
find "${1-.}" -maxdepth 1 -type f -printf x | wc -c
}
(通常のファイルへのシンボリックリンクもカウントしたい場合に変更-type
し-xtype
ます)。