Lista de arquivos em que a contagem de linhas é maior que 2

1

O bando de arquivos existe em um diretório. Alguns arquivos possuem 1 linha, alguns arquivos possuem mais linhas.

Estou tentando exibir nomes de arquivos de um diretório em particular (com caminho completo), onde o número de linhas no arquivo é > 2.

Eu estou aqui, para exibir arquivos em um diretório. ache / abc / def -maxdepth 1 -tipo f

    
por sunshine737 21.05.2015 / 17:44

3 respostas

-1

Experimente este comando:

find . -maxdepth 1 -type f \
    -exec sh -c 'test $( wc -l {} | cut -f1 -d" " ) -gt "2"' \; -print

você precisa ter cuidado se algum arquivo alienígena chamado $(rm -rf ~) for encontrado em seu diretório, isso pode fazer com que o comando exclua todos os seus dados nesse diretório

find . -maxdepth 1 -type f procura por arquivos no diretório atual para profundidade 1, o que significa que não desce em subdiretórios

-exec sh -c executa um comando no qual estou executando um script para um comando

'test $( wc -l {} | cut -f1 -d" " ) -gt "2"' este é o comando que está contando o número de linhas de cada arquivo maior que 2.

Em seguida, imprima a saída

    
por 21.05.2015 / 19:36
4

Com o GNU awk ou mawk e alguns outros , para listar arquivos regulares no arquivo atual diretório que contém pelo menos três linhas:

find . ! -name . -prune -type f -size +2c -exec awk '
   FNR==3{print FILENAME; nextfile}' {} +

(note que isso conta também linhas não terminadas. Se um arquivo contiver a\nb\nc em vez de a\nb\nc\n , isso ainda considera que o arquivo tem 3 linhas, mesmo que wc -l retorne apenas 2. -size +2c é apenas uma otimização para pular a abertura e a leitura de arquivos com menos de 3 bytes, já que eles não podem conter 3 linhas).

Isso é eficiente, pois ele executa o mínimo de comandos possível e para o processamento de um arquivo assim que ele vê a terceira linha, em vez de ler o arquivo completamente para encontrar o número de linhas.

Se o seu shell é zsh , você pode encurtá-lo para

awk 'FNR==3{print FILENAME; nextfile}' ./*(D.L+2)

find . ! -name . -prune é o equivalente padrão do find . -mindepth 1 -maxdepth 1 do GNU ( ameixa em todos os diretórios, mas . ).

(observe que o código awk acima também funcionará em awk implementações que não suportam nextfile , é apenas que ele lerá os arquivos totalmente lá, que a declaração nextfile será apenas tratada como uma referência variável).

    
por 21.05.2015 / 17:47
0
grep -Hsc . -- * | sed -n '/:[0-2]$/!s/:.*$//p'

mas não considere as linhas vazias. Se você quiser levá-lo para a contagem:

grep -Hsc '$' -- * | sed '/:[0-2]$/d;s/:.*$//'
    
por 21.05.2015 / 18:10

Tags