¿Hay alguna manera de averiguar el número de líneas de la salida de un comando?

¿Hay alguna manera de averiguar el número de líneas de la salida de un comando?

Estoy intentando comparar las salidas de los comandos entre dos servidores. Quiero saber el número de líneas a partir de la salida de comandos como ls -l. ¿Hay una manera de hacerlo? Hasta ahora no he encontrado nada.

Respuesta1

Para alguien esto puede ser más fácil de recordar:

ls -l | grep . -c

Tenga en cuenta que tanto grep como wc contarán líneas auxiliares como total 32044o o ./dirname:. Para evitar esto, especialmente en salidas recursivas como, ls -lRprueba esto:

find . -type f | grep . -c

donde primero .está la ruta del directorio y -type fsignifica que findsolo se enumerarán los archivos. Si necesita todos los tipos (incluidos directorios, sockets, etc.), simplemente omita -type f.

Tenga en cuenta: wc -lSÍ cuenta las líneas vacías (solo '\n'), mientras que grep . -c- NO.

Respuesta2

Deberías usar wc:

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

De 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

wces parte de GNU coreutils, puedes tenerlo en la mayoría de Unix-likelos sistemas.

Respuesta3

puedes canalizar tu comando a wccomando:

ls -l | wc -l

Respuesta4

Si desea comparar un recuento de los archivos procesados ​​por cualquiera de los servidores, puede hacerlo de manera confiable como:

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

Eso enumera de forma recursiva todos los archivos, no directorios, uno por línea, incluso .dotfilesdebajo del directorio actual, utilizando globos de shell según sea necesario para reemplazar caracteres no imprimibles. grepfiltra cualquier listado del directorio principal o ..líneas */en blanco, por lo que solo debe haber una línea por archivo, cuyo recuento total grepregresa a usted. Si desea que también se incluyan directorios secundarios:

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

o...

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

Tenga en cuenta que la -Aopción lses POSIX a partir de la última versión.

información relacionada