Estou tentando fazer algo como
ls -t | head -n 3 | xargs -I {} tar -cf t.tar {}
para arquivar os 3 últimos arquivos modificados, mas ele acaba executando o comando tar separadamente para cada um dos arquivos e, no final, fiquei com um arquivo tar contendo o último dos 3 arquivos (em qualquer ordem). Sei que não estou usando o 'xargs' corretamente, mas a pesquisa não ajudou; Encontro exemplos que também não funcionam. Mesmo o comando mais simples
ls | xargs -I {} tar -cf t.tar {}
termina com um arquivo tar que contém apenas um dos arquivos nesse diretório.
-I
sinalizador, deve usar algo diferente{}
da substituição. Por exemplols -t | head -n 3 | xargs -I foo tar -cf t.tar foo
-I
implica o-L 1
que significa efetivamente executar o seguinte comando para cada 1 linha de entrada, e é por isso que você está vendo os resultados que está.De acordo com este post , é melhor usá-lo em
r
vez dec
, no caso dexargs
agrupar as entradas, produzindo um arquivo tar contendo apenas o último pedaço. Portanto, uma solução melhor seria:fonte