Inspirado por esta pregunta . La pregunta original, en definitiva, es "Cómo convertir todo :2f
en -
en todos los archivos dentro de una carpeta". por ejemplo, si tengo un archivo ./abc:2fdef
, debería cambiarle el nombre ./abc-def
.
Al principio pensé que era una tarea sencilla ... find
todos los archivos y luego sed
para reemplazar :2f
a -
. Cuando intento construir una línea, se me ocurre el comando:
find . -type f -name '*:2f*' | xargs -I {} mv {} $(echo {} | sed "s/:2f/-/ig")
Sin embargo no funciona. Después de hacer muchas pruebas, descubrí que el problema radica en la xargs
parte: $ () se ejecutó antes de xargs
reemplazar el lugar {}
con los nombres de los archivos. Elaborar,
xargs -I {} mv {} $(echo {} | sed "s/:2f/-/ig")
fue evaluado como ( $(...)
fue evaluado)
xargs -I {} mv {} {}
y entonces
mv ./abc:2fdef ./abc:2fdef
Lo cual no era lo que esperaba. Entonces, mi pregunta es, ¿puedo hacer que xargs sustituya todo {}
en nombres de archivo antes de evaluar la $(...)
parte?