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

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

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

решение1

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

ls -l | grep . -c

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

find . -type f | grep . -c

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

Обратите внимание: wc -lпустые строки (только '\n') учитываются, а grep . -c- — НЕ учитываются.

решение2

Вам следует использовать 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систем.

решение3

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

ls -l | wc -l

решение4

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

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

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

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

или...

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

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

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