Команда для печати количества файлов *.pdf в выбранном каталоге

Команда для печати количества файлов *.pdf в выбранном каталоге

В настоящее время я не на машине Linux. Приведет ли следующая команда к желаемому результату?

ls | grep ".pdf" | wc

решение1

Нет, ".pdf" слишком много значит, например, foo.pdfaи bpdf.

Более того, даже если у вас нет ошибочно совпадающих файлов, wcбез параметров выводится количество строк, слов и байтов во входных данных, так что вы получите на два числа больше, чем вам нужно. Если вы хотите grepсмешать все это, вы можете использовать ls | grep -E "\.pdf$" | wc -l, но если у вас нет большого количества pdf-файлов в этом каталоге, grep не нужен, вы можете обойтись ls *.pdf | wc -l.

Добавлено позже, когда я обдумал это:

Кроме того, grepможно выполнить подсчет, поэтому, если grepэто необходимо, просто добавьте -cопцию grep вместо передачи вывода в wc -l, ls | grep -cE "\.pdf$"или если вы хотите избежать подсчета каталогов с именами <something.pdf>: ls -l | grep -cE "^-.*\.pdf$".

решение2

Вам следует использовать

ls | grep ".pdf" | wc -l

Параметр -lбудет подсчитывать только количество полученных строк, в то время как без него -lвы бы получили и другие подсчеты, такие как количество новых строк, слов и байтов. Обратите внимание, что это будет подсчитывать имена файлов (и папки тоже), которые содержат цепочку символов ".pdf".

Чтобы подсчитать только файлы, заканчивающиеся на .pdf, лучше использовать find:

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

решение3

Ваша оболочка должна уметь выполнять фильтрацию:

ls *.pdf | wc -l

или вам придется убедиться, что окончание имен файлов совпадает:

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

(обратите внимание на знак доллара).

Примечание: оба варианта также будут соответствоватькаталогизаканчивающиеся на «.pdf», если таковые имеются.

Примечание 2: lsдолжно вести себя так, как будто вы дали ему опцию, -1как только вы передали его вывод. В противном случае добавьте этот переключатель.

Связанный контент