GNU/Linux >> Tutoriales Linux >  >> Linux

Cambiar el nombre de archivos y directorios de forma recursiva en ubuntu/bash

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.


Linux
  1. Cómo buscar y eliminar directorios recursivamente en Linux

  2. Encuentra archivos y directorios en Linux como un profesional

  3. Bash =~ Regex y Https://regex101.com/?

  4. Crear y eliminar archivos y directorios en Linux

  5. Buscar y copiar archivos

Buscar comando en Linux (Buscar archivos y directorios)

Cómo cambiar el nombre de archivos y directorios en Linux

3 formas de encontrar archivos y directorios en Linux

Cómo cambiar el nombre de archivos y directorios en Ubuntu 20.04

Encuentre archivos y directorios en Linux fácilmente

¿Cómo puedo eliminar recursivamente todos los archivos y directorios vacíos en Linux?