for dir in Abc/ Qwe/ Zxc/ Rty/; do
result="$(find "$dir" -maxdepth 1 -type f -name '*.pdf' -printf .)"
echo "Folder '${dir}' contains ${#result} *.pdf files."
done
Isso ignora os subdiretórios.
Suponha que eu tenha uma estrutura de arquivos:
$ cd /home/Desktop
$ ls -d */
Abc/ Qwe/ Zxc/ Rty/
$
Agora quero fazer uma iteração em todos os diretórios e ver se eles têm arquivos ".pdf". Alguém poderia dizer qual é a melhor maneira de fazer isso?
Use find /home/Desktop -type f -name '*.pdf'
.
Usar find
é certamente a maneira mais rápida de fazer isso. Se você quiser restringir os diretórios para procurar, você pode usar:
find <dir1> <dir2> ... -type f -name '*.pdf'
Se você quiser contar o número de arquivos:
find <dir1> <dir2> ... -type f -name '*.pdf' | wc -l
com zsh
:
for dir (Abc Qwe Zxc Rty) {
pdf=($dir/*.pdf(ND.))
print -r "Directory '$dir' contains ${#pdf} *.pdf files"
}
Existem várias maneiras diferentes de fazer isso, dependendo do que você deseja fazer com as informações.
Se você quiser uma lista de diretórios que contenham diretamente .pdf
arquivos (ou seja, apenas no nível superior, não dentro de subdiretórios), eu usaria:
dirname */*.pdf | sort | uniq
Se você quiser uma lista de diretórios que contenham .pdf
arquivos em qualquer nível (para que possam estar dentro dos subdiretórios do diretório), tente
find . -name '*.pdf' | cut -d/ -f2 | sort | uniq
ou, se você quiser pesquisar apenas alguns subdiretórios,
find Abc Qwe Zxc Rty -name '*.pdf' | cut -d/ -f1 | sort | uniq
Se você quiser uma lista de todos os arquivos .pdf
nos subdiretórios, é só
find . -name '*.pdf'
Se você quiser uma contagem de .pdf
arquivos dentro de cada diretório, conte apenas os arquivos no nível superior que eu usaria
dirname */*.pdf | sort | uniq -c
ou para incluir arquivos em subdiretórios
find . -name '*.pdf' | cut -d/ -f2 | sort | uniq -c
(você pode dizer que a diferença é simplesmente adicionar a opção -c
a uniq
).