Chamada de função interna com parâmetros xargs

Chamada de função interna com parâmetros xargs

Estou tentando criar um arquivo ocorrido em meu /tmpdiretório de cada arquivo contendo uma string específica.

O problema é que a chamada para basename {}não parece funcionar. Nem isso, nem echo basename {}.

grep -R 'mystring' . | cut -d: -f 1 | uniq | xargs -n 1 -I {} touch /tmp/`basename {}`

Alguém sabe como posso executar a função basename no parâmetro xargs?

Responder1

tente isto:

grep -R 'mystring' . | cut -d: -f 1 | uniq| xargs -n 1 -I {} -t -i ksh  -c "touch /tmp/$(basename {})"

Responder2

O problema é que os crases são expandidos muito cedo (ou seja, nem uma vez para cada argumento enviado ao xargs). Pode haver uma maneira melhor, mas você deve conseguir usar um loop bash explícito:

grep -R 'mystring' . | cut -d: -f 1 | uniq | while read f; do touch "/tmp/`basename $f`"; done

informação relacionada