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

2

Eu estou tentando criar um arquivo ocorrente dentro do meu diretório /tmp de cada arquivo contendo uma string específica.

O problema é que a chamada para basename {} parece não 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 obter a função de nome de base executada no parâmetro xargs?

    
por Spredzy 15.07.2012 / 20:35

2 respostas

2

tente isto:

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

O problema é que os backticks são expandidos muito cedo (ou seja, não uma vez para cada argumento enviado para xargs). Pode haver uma maneira melhor, mas você deve ser capaz de obter um loop bash explícito:

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