Tentando catar o resultado de comandos canalizados

2

Eu tenho uma pasta de arquivos nomeados list20140801.txt list20140802.txt ....

Estou tentando fazer isso

ls | sort | tail -3 | cat

Mas está apenas me dando os nomes dos arquivos, não os catando.

    
por Colton 12.08.2014 / 23:55

2 respostas

2

De acordo com o manual cat , o trabalho do gato é:

Concatenate FILE(s), or standard input, to standard output.

Não há razão para que cat trate sua entrada padrão como nomes de arquivos. O que você precisa é de

ls | sort | tail -3 | xargs cat

em vez disso.

Verifique a página do manual xargs para obter mais informações: link

    
por 13.08.2014 / 00:13
0

A saída de ls já está classificada por padrão da mesma maneira que sort classifica por padrão, portanto, sort não é necessário.

A maneira mais comum de passar uma lista gerada de arquivos para um comando é usar xargs . Veja a página xargs man para detalhes, mas neste caso você não precisa de nenhuma opção. ( xargs pode não fazer o que você quer se você tiver um grande número de arquivos, mas nos casos mais comuns ele funciona bem sem que você precise pensar sobre isso.)

A versão de tail usada em muitos sistemas Linux atualmente não aceita apenas -3 como uma opção. Isso requer que você use -n3 .

Finalmente, o cat no final do seu pipeline não está fazendo nada útil, então ele pode ser omitido também.

Este comando deve fazer o que você quiser.

ls | xargs tail -n3

Atualizar

Acabei de ler a resposta do @ AtomicHeartFather e percebi que posso ter colocado o tail na parte errada do problema. Nesse caso, o comando seria

ls | tail -n3 | xargs cat

que é praticamente o que o AtomicHeartFather escreveu, exceto pelo sort .

    
por 13.08.2014 / 00:13