Qualquer coisa que envolva ls
provavelmente produzirá resultados inesperados com caracteres especiais (espaço e outros símbolos). Qualquer bashismo (como matrizes) não é portátil. Qualquer coisa que envolva while read
geralmente é lenta.
Por outro lado, find
é MUITO flexível (muitas opções para filtrar), tem [pelo menos] duas sintaxes que não são seguras para caracteres especiais ... e Ele escala bem em um diretório grande.
Neste exemplo, usei -iname
para corresponder ao nome da extensão de maiúsculas e minúsculas. Eu também restrinjai o -maxdepth 1
a respeitar a sua pergunta "no diretório atual". Em vez de contar o número de linhas, onde os nomes de arquivos podem incluir CR / LF, -print0
imprimirá um byte NULL no final de cada nome de arquivo ... então | tr -d -c "-print0 | tr -d -c "-printf "-printf '\n' | wc -l
0" | wc -c
0" | wc -c
0" | wc -l
está contando arquivos com precisão (bytes NULOS!).
extensions="jpg png gif"
for ext in $extensions; do
c=$(find . -maxdepth 1 -iname "*.$ext" -print0 | tr -d -c "extensions="jpg png gif"
for ext in $extensions; do
c=$(find . -maxdepth 1 -iname "*.$ext" -print0 | tr -d -c "%pre%0" | wc -c)
if [ $c -gt 0 ]; then
echo "Found $c *.$ext files"
find . -maxdepth 1 -iname "*.$ext" -print0 | xargs -0 -r -n1 DOSOMETHINGHERE
# or # find . -maxdepth 1 -iname "*.$ext" -exec "ls" "-l" "{}" ";"
fi
done
0" | wc -c)
if [ $c -gt 0 ]; then
echo "Found $c *.$ext files"
find . -maxdepth 1 -iname "*.$ext" -print0 | xargs -0 -r -n1 DOSOMETHINGHERE
# or # find . -maxdepth 1 -iname "*.$ext" -exec "ls" "-l" "{}" ";"
fi
done
P.S. %code% pode ser substituído por %code% ou mesmo %code% .