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.