tente isto:
grep -R 'mystring' . | cut -d: -f 1 | uniq| xargs -n 1 -I {} -t -i ksh -c "touch /tmp/$(basename {})"
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?
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
Tags command-line xargs basename