Есть ли способ узнать количество строк из вывода команды?

Я пытаюсь сравнить командные выходы между двумя серверами. Я хочу узнать количество строк из вывода команд, таких как ls -l . Есть ли способ сделать это? До сих пор я ничего не нашел.

Для кого-то это может быть легче запомнить:

ls -l | grep . -c

Обратите внимание, что grep и wc будут подсчитывать вспомогательные строки, например, total 32044 или ./dirname: Чтобы избежать этого, особенно в рекурсивном выпуске, например ls -lR попробуйте следующее:

find . -type f | grep . -c

где сначала . это путь к каталогу и -type f означает, что find будет перечислять только файлы. Если вам нужны все типы (включая каталоги, сокеты и т. Д.), То просто опустите -type f .

Обратите внимание: wc -l Учет количества пустых строк (только «\ n») во время grep . -c grep . -c – НЕ.

Вы должны использовать wc :

 $ wc -l .emacs.d/init.el 73 .emacs.d/init.el 

От man wc :

 NAME wc - print newline, word, and byte counts for each file SYNOPSIS wc [OPTION]... [FILE]... wc [OPTION]... --files0-from=F .... -l, --lines print the newline counts 

wc является частью GNU coreutils , вы можете использовать его в большинстве Unix-like систем.

вы можете передать команду команде wc :

 ls -l | wc -l 

Да, вы могли бы найти количество строк из вывода команды ls -l через awk ,

 ls -l | awk 'END{print NR}' 

Переменная NR Awk сохраняет последний номер записи в конце ( после прочтения всех входных строк ).

Если вы хотите сравнить количество файлов, обрабатываемых сервером, то вы можете сделать это надежно:

 ls -aR1qp ./ | grep -cv '/\|^$' 

Это рекурсивно перечисляет все файлы, а не каталоги – по одному на строку, включая .dotfiles под текущим каталогом, используя оболочки оболочки, по мере необходимости, для замены непечатаемых символов. grep отфильтровывает любые списки родительских каталогов или .. или */ или пустые строки – поэтому должна быть только одна строка для каждого файла – общее количество, которое grep возвращает вам. Если вы хотите включить дочерние каталоги:

 ls -aR1qp ./ | grep -cv '^\.\{1,2\}/\|^$' 

или…

 ls -AR1q ./ | grep -cv '/\|^$' 

Обратите внимание, что опция -A для ls – это POSIX с последней версией.