Mi entorno: Bash 3.5 LinuxRedhat
Estoy usando el siguiente código para cambiar el nombre de todos mis archivos en un solo directorio.
for file in *.* ; do mv "$file" "Add_$file" ; doneAhora, quiero cambiar el nombre de mi archivo de forma recursiva. Y no sé cómo hacerlo.
Las primeras ideas con find no funcionan, porque {} devuelve ./ con el comando:
find . -type f -name "*.*" -execdir mv {} Add_{} ";"Necesitamos algo, que elimine el ./ al frente pero también funcione en los subdirectorios.
echo 'f=$(basename "$1"); mv "$f" Add_"$f";' > adhoc.sh chmod a+x adhoc.sh find . -type f -name "*.*" -execdir $PWD/adhoc.sh "{}" ";" Al menos esto funciona para gnu-find . Es posible que otros hallazgos no tengan el comando -execdir .
Gracias por skyking por señalar mi error.
Para Linux, puede encontrar una versión de 'cambiar nombre' en el repositorio, pero normalmente debe instalarse y no es parte de la instalación estándar. Si a menudo cambia el nombre con la línea de comandos, vale la pena el esfuerzo. Con rename , especifica un comando de sustitución de expresiones regulares y puede probarlo primero:
find . -type f -exec rename -n "s/(.*)/Add_\1/" {} ";"