Una solución usando find :
Para cambiar el nombre solo archivos :
find /your/target/path/ -type f -exec rename 's/special/regular/' '{}' \;
Para renombrar solo directorios :
find /your/target/path/ -type d -execdir rename 's/special/regular/' '{}' \+
Para cambiar el nombre de archivos y directorios :
find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+
Si no le importa instalar otra herramienta, puede usar rnm:
rnm -rs '/special/regular/g' -dp -1 *
Pasará por todos los directorios/subdirectorios (debido a -dp -1 ) y reemplace especial con normal en sus nombres.
La respuesta de @speakr fue la clave para mí.
Si usa -execdir para transformar archivos y directorios, también querrá eliminar -type f del ejemplo mostrado. Para deletrearlo, use:
find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+
Además, considere agregar g marca (global) a la expresión regular si desea reemplazar todos ocurrencias de special con regular en un nombre de archivo dado y no solo la primera aparición. Por ejemplo:
find /your/target/path/ -execdir rename 's/special/regular/g' '{}' \+
transformará special-special.jpg a regular-regular.jpg . Sin la bandera global, terminarás con regular-special.jpg .
FYI:GNU Rename no está instalado de forma predeterminada en Mac OSX. Si está utilizando el administrador de paquetes Homebrew, brew install rename solucionará esto.
Intente hacer esto (requiere bash --version>=4):
shopt -s globstar
rename -n 's/special/regular/' **
Elimina el -n cambie cuando sus pruebas estén bien
Hay otras herramientas con el mismo nombre que pueden o no ser capaces de hacer esto, así que ten cuidado.
Si ejecuta el siguiente comando (GNU )
$ file "$(readlink -f "$(type -p rename)")"
y tienes un resultado como
.../rename: Perl script, ASCII text executable
y no contiene:
ELF
entonces esta parece ser la herramienta adecuada =)
Si no, para que sea el predeterminado (normalmente ya es el caso) en Debian y derivado como Ubuntu :
$ sudo update-alternatives --set rename /path/to/rename
(reemplace /path/to/rename a la ruta de tu perl's rename comando.
Si no tienes este comando, busca en tu administrador de paquetes para instalarlo o hazlo manualmente
Por último, pero no menos importante, esta herramienta fue escrita originalmente por Larry Wall, el padre de Perl.