Estou tentando comparar saídas de comando entre dois servidores. Quero descobrir o número de linhas da saída de comandos como ls -l
. Tem algum jeito de fazer isso? Até agora não encontrei nada.
Responder1
Para alguém, isso pode ser mais fácil de lembrar:
ls -l | grep . -c
Observe que grep e wc contarão linhas auxiliares como total 32044
ou ou ./dirname:
. Para evitar isso, especialmente na saída recursiva, ls -lR
tente isto:
find . -type f | grep . -c
onde first .
é o caminho do diretório e -type f
significa que find
listará apenas os arquivos. Se você precisar de todos os tipos (incluindo diretórios, soquetes, etc.), basta omitir -type f
.
Observação: wc -l
CONTA as linhas vazias (apenas '\n') enquanto grep . -c
- NÃO.
Responder2
Você deveria 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
faz parte do GNU coreutils
, você pode tê-lo na maioria Unix-like
dos sistemas.
Responder3
você pode canalizar seu comando para wc
comando:
ls -l | wc -l
Responder4
Se você quiser comparar uma contagem dos arquivos processados por qualquer um dos servidores, poderá fazer isso de maneira confiável, como:
ls -aR1qp ./ | grep -cv '/\|^$'
Isso lista recursivamente todos os arquivos - não diretórios - um por linha, inclusive .dotfiles
abaixo do diretório atual, usando shell globs conforme necessário para substituir caracteres não imprimíveis. grep
filtra qualquer listagem de diretório pai ou ..
linhas */
em branco - portanto, deve haver apenas uma linha por arquivo - cuja contagem total grep
retorna para você. Se você quiser que diretórios filhos também sejam incluídos:
ls -aR1qp ./ | grep -cv '^\.\{1,2\}/\|^$'
ou...
ls -AR1q ./ | grep -cv '/\|^$'
Observe que a -A
opção ls
é POSIX na versão mais recente.