В настоящее время я не на машине 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
как только вы передали его вывод. В противном случае добавьте этот переключатель.