Qual é o objetivo do comando xargs -I?

2

Você pode explicar o que esse comando faz:

files=(this_is_filename)
for filename in ${files[@]}; do 
  ls -t1 ../htory/$filename* |
    head -1 |
    xargs -I fname cp -p fname ../htory2/somefile.CSV
done

Especialmente esta parte deste comando

xargs -I fname cp -p fname ../htory2/somefile.CSV
    
por jrara 09.08.2013 / 14:57

1 resposta

5

xargs transforma a entrada em argumentos. A opção -I especifica a sequência a ser usada como um espaço reservado para o argumento. Portanto, se o pipeline produzir algo como

file1
file2

a linha xargs transforma isso em

cp -p file1 ../htory2/somefile.CSV
cp -p file2 ../htory2/somefile.CSV

O head -1 retorna apenas uma linha, por isso não vejo nenhum benefício real de usar xargs em vez de, digamos

cp -p "$(ls -t1 ../htory/$filename* | head -1)" ../htory2/somefile.CSV

Além disso, como o arquivo de destino é sempre o mesmo, ele será sobregravado pelo último arquivo em ${files[@]} .

    
por 09.08.2013 / 15:10