Eu tenho uma pasta de arquivos chamada 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 cat'ing.
Responder1
De acordo com o cat
manual, a função do gato é:
Concatene FILE(s), ou entrada padrão, para saída padrão.
Não há razão para cat
tratar sua entrada padrão como nomes de arquivos. O que você precisa é
é | classificar | cauda -3 | gato xargs
em vez de.
Verifique xargs
a página de manual para obter mais informações:http://linux.about.com/library/cmd/blcmdl1_xargs.htm
Responder2
A saída de ls
já está classificada por padrão da mesma maneira que sort
a classificação padrão, portanto sort
não é necessária.
A maneira mais comum de passar uma lista gerada de arquivos para um comando é usar xargs
. Consulte a xargs
página de manual para obter detalhes, mas neste caso você não precisa de nenhuma opção. ( xargs
pode não fazer o que você deseja se tiver um grande número de arquivos, mas na maioria dos casos comuns funciona bem sem que você precise pensar nisso.)
A versão tail
usada em muitos sistemas Linux hoje em dia não aceita apenas -3
como opção. Requer que você use -n3
.
Por fim, o cat
final do pipeline não está fazendo nada de útil, portanto também pode ser omitido.
Este comando deve fazer o que você deseja.
ls | xargs tail -n3
Atualizar
Acabei de ler a resposta do @AtomicHeartFather e percebi que posso ter colocado tail
a parte errada do problema. Nesse caso, o comando seria
ls | tail -n3 | xargs cat
que é basicamente o que AtomicHeartFather escreveu, exceto pelo arquivo sort
.