O que fazer quando o resultado do pipe não é o último argumento no próximo comando

0

O exemplo abaixo mostra o que eu quero fazer, ou seja, pegar o resultado do meu último pipe e colocá-lo no meio do próximo comando (onde eu escrevi $RESULT_FROM_FIND_COMMAND ).

$ find . -name "*0.01*txt" | cp $RESULT_FROM_FIND_COMMAND $(awk '{{split($1,a,"/")} {print a[3]"_"a[4]"_"a[5]}}')

Qual variável ou comando devo usar para conseguir isso?

Estou usando bash se isso importa.

note que awk também deve pegar o resultado de find como uma entrada.

    
por The Unfun Cat 23.06.2013 / 09:44

1 resposta

3

Nesse caso, use o shell para iterar

find . -name "*0.01*txt" | while IFS= read -r filename; do
    newname=$(awk '{split($1,a,"/"), print a[3]"_"a[4]"_"a[5]}' <<< "$filename")"
    cp "$filename" "$newname"
done

Em geral, o xargs é útil:

find .... -print0 | xargs -o -I FILE someCommand arg1 FILE arg3 FILE
    
por 23.06.2013 / 13:31

Tags