ls -t | head -n 3 | xargs tar -cf t.tar
Funciona para mim. Existe uma razão pela qual você precisa do sinalizador -I
definido?
Estou tentando fazer algo como
ls -t | head -n 3 | xargs -I {} tar -cf t.tar {}
para arquivar os três últimos arquivos modificados, mas ele acaba executando o comando tar separadamente para cada um dos arquivos e, no final, fico com um arquivo tar contendo o último dos três arquivos (em qualquer ordem). Eu sei que não estou usando 'xargs' corretamente, mas a pesquisa não ajudou; Eu acho exemplos que não funcionam também. Mesmo o comando mais simples
ls | xargs -I {} tar -cf t.tar {}
acaba com um arquivo tar que contém apenas um dos arquivos desse diretório.
De acordo com este post , é melhor usar r
em vez de c
, no caso de xargs
dividir as entradas, gerando um arquivo tar contendo apenas o último bloco. Então, uma solução melhor seria:
rm -f t.tar 2>/dev/null # remove tar if there
ls -t | head -n 3 | xargs tar -rf t.tar