passando variáveis de 'ls' para 'tar' via 'xargs'

5

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.

    
por oligilo 20.11.2015 / 14:18

2 respostas

6

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?

    
por 20.11.2015 / 14:23
0

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
    
por 24.02.2017 / 18:06

Tags