Inspirado por esta pregunta . La pregunta original, en definitiva, es "Cómo convertir todo :2fen -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 ... findtodos los archivos y luego sedpara reemplazar :2fa -. 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 xargsparte: $ () se ejecutó antes de xargsreemplazar 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?
