Assumindo o bash 4+ (que qualquer versão suportada do Ubuntu tem):
num_files() (
shopt -s nullglob
cd -P -- "${1-.}" || return
set -- *
echo "$#"
)
Chame como num_files [dir]
. dir
é opcional, caso contrário, ele usa o diretório atual. Sua versão original não conta com arquivos ocultos, então não faz isso. Se você quiser, shopt -s dotglob
antes de set -- *
.
Seu exemplo original conta não apenas com arquivos regulares, mas também diretórios e outros dispositivos - se você realmente quer apenas arquivos regulares (incluindo links simbólicos para arquivos regulares), você precisará checá-los:
num_files() (
local count=0
shopt -s nullglob
cd -P -- "${1-.}" || return
for file in *; do
[[ -f $file ]] && let count++
done
echo "$count"
)
Se você tiver o GNU find, algo assim também é uma opção (note que isso inclui arquivos ocultos, o que seu comando original não fez):
num_files() {
find "${1-.}" -maxdepth 1 -type f -printf x | wc -c
}
(altere -type
para -xtype
se você também quiser contar links simbólicos para arquivos regulares).