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 32044
o o ./dirname:
. Para evitar esto, especialmente en salidas recursivas como, ls -lR
prueba esto:
find . -type f | grep . -c
donde primero .
está la ruta del directorio y -type f
significa que find
solo se enumerarán los archivos. Si necesita todos los tipos (incluidos directorios, sockets, etc.), simplemente omita -type f
.
Tenga en cuenta: wc -l
SÍ 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
wc
es parte de GNU coreutils
, puedes tenerlo en la mayoría de Unix-like
los sistemas.
Respuesta3
puedes canalizar tu comando a wc
comando:
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 .dotfiles
debajo del directorio actual, utilizando globos de shell según sea necesario para reemplazar caracteres no imprimibles. grep
filtra cualquier listado del directorio principal o ..
líneas */
en blanco, por lo que solo debe haber una línea por archivo, cuyo recuento total grep
regresa 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 -A
opción ls
es POSIX a partir de la última versión.