
Estoy intentando crear un archivo dentro de mi /tmp
directorio 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