Comando para imprimir o número de arquivos *.pdf em um diretório escolhido

Comando para imprimir o número de arquivos *.pdf em um diretório escolhido

Atualmente não estou em uma máquina Linux. O comando a seguir produziria o resultado desejado?

ls | grep ".pdf" | wc

Responder1

Não, ".pdf" é demais, por exemplo, foo.pdfae bpdf.

Além disso, mesmo que você não tenha arquivos correspondentes incorretamente, sem opções gera o número de linhas, palavras e bytes na entrada, então você obteria dois números a mais do que wcestá interessado. greppoderia fazer ls | grep -E "\.pdf$" | wc -l, mas a menos que você tenha muitos arquivos PDF nesse diretório, grep não é necessário, você pode sobreviver com ls *.pdf | wc -l.

Adicionado mais tarde, quando pensei nisso:

Além disso, greppode-se fazer a contagem, então se grepestiver no mix, basta adicionar a -copção grep em vez de canalizar a saída para wc -l, então ls | grep -cE "\.pdf$"ou se quiser evitar a contagem de diretórios chamados <something.pdf>: ls -l | grep -cE "^-.*\.pdf$".

Responder2

Você deveria usar

ls | grep ".pdf" | wc -l

O -lparâmetro contará apenas o número de linhas resultantes, enquanto sem -lvocê também obteria outras contagens, como contagem de nova linha, palavra e byte. Observe que isso contará nomes de arquivos (e também pastas) que contêm a cadeia de caracteres ".pdf".

Para contar apenas os arquivos que terminam com .pdf, é melhor usar find:

find . -type f -name "*.pdf" | wc -l

Responder3

Seu shell deve ser capaz de fazer a filtragem:

ls *.pdf | wc -l

ou você precisa ter certeza de que corresponde ao final dos nomes dos arquivos:

ls | grep "*\.pdf$" | wc -l

(observe o cifrão).

Nota: ambos também corresponderãodiretóriosterminando em ".pdf", se houver.

Nota 2: lsdeve se comportar como se você tivesse dado a opção -1assim que canalizar sua saída. Caso contrário, adicione esta opção.

informação relacionada