A resposta dada pelo kev irá quebrar em arquivos com novas linhas no nome. Você pode fazer isso em bash
:
shopt -s nullglob dotglob globstar
set -- **/*.pdf **/*.tex
echo "$#"
Eu escrevi o seguinte script para encontrar o número de arquivos pdf e tex a partir do diretório atual, incluindo os subdiretórios e arquivos ocultos. O código a seguir é capaz de encontrar o número de arquivos pdf até 2 níveis de subdiretórios abaixo, mas depois disso ele diz que não há subdiretórios ...
#!/bin/bash
touch t.txt
k='find -type d |wc -l'
k1='expr $k - 1'
echo $k1
message1="*.pdf *.tex"
count='ls -al $message1|wc -l'
find -type d > t.txt
i=2
while [ $i -le $k ]
do
kd='head -$i t.txt|tail -1'
echo $kd
touch $kd/t.txt
cp t.txt $kd/t.txt
i='expr $i + 1'
done
i=2
while [ $i -le $k ]
do
nd='head -$i t.txt|tail -1'
set -x
echo $nd
set +x
cd $nd
j='ls -al $message1|wc -l'
count='expr $count + $j'
i='expr $i + 1'
done
#set +x
echo $count
A resposta dada pelo kev irá quebrar em arquivos com novas linhas no nome. Você pode fazer isso em bash
:
shopt -s nullglob dotglob globstar
set -- **/*.pdf **/*.tex
echo "$#"
find
funciona bem para mim:
$ find . -name '*.pdf' -o -name '*.tex' | wc -l
75
$ find . -name '*.pdf' | wc -l
16
$ find . -name '*.tex' | wc -l
59
$ echo $((16+59))
75
Editar:
Para lidar com casos especiais: newline
in filename
$ find . \( -name '*.pdf' -o -name '*.tex' \) -printf x | wc -c
Eu recomendaria (se disponível) usando locate
em vez de localizar. Você estaria consultando um banco de dados e os resultados seriam instantâneos e praticamente não há carga no sistema. Embora o banco de dados seja atualizado apenas quando o sistema executa updatedb
, portanto, se você quisesse até a segunda informação, teria que executá-lo primeiro e colocaria uma carga no sistema, mas isso depende de como você pretende para usar sua pesquisa.
Você pode usar qualquer regex que atenda às suas necessidades.
system1:/unix.stackexchange # locate *.tex *.pdf | grep unix.stack.*
/unix.stackexchange/access_me/1/file.pdf
/unix.stackexchange/access_me/1/file.tex
Tags files shell recursive shell-script