Veja se uma pasta tem alguns arquivos com certas extensões

4

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?

    
por gkmohit 04.06.2014 / 17:55

5 respostas

5
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.

    
por 04.06.2014 / 18:08
2

Use find /home/Desktop -type f -name '*.pdf' .

    
por 04.06.2014 / 18:00
1

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

    
por 04.06.2014 / 19:49
1

com zsh :

for dir (Abc Qwe Zxc Rty) {
  pdf=($dir/*.pdf(ND.))
  print -r "Directory '$dir' contains ${#pdf} *.pdf files"
}
    
por 04.06.2014 / 22:01
1

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 ).

por 04.06.2014 / 23:22