Llamada a función interna con parámetros xargs

Llamada a función interna con parámetros xargs

Estoy intentando crear un archivo dentro de mi /tmpdirectorio de cada archivo que contenga una cadena específica.

El problema es que la llamada a basename {}no parece funcionar. Ni esto, ni echo basename {}.

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

¿Alguien sabe cómo puedo ejecutar la función nombre base en el parámetro xargs?

Respuesta1

prueba esto:

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

Respuesta2

El problema es que las comillas invertidas se expanden demasiado pronto (es decir, no una vez por cada argumento enviado a xargs). Puede que haya una manera mejor, pero deberías poder salirte con la tuya con un bucle bash explícito:

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

información relacionada