varios renombrar recursivamente parte nombres nombre masivo masiva forma espacios eliminar copiar como comando cambiar archivos archivo linux replace command filenames spaces

recursivamente - renombrar archivos linux masivo



Linux-Reemplazar espacios en los nombres de archivo (10)

Tengo una cantidad de archivos en una carpeta y deseo reemplazar cada carácter de espacio en todos los nombres de archivo con guiones bajos. ¿Cómo puedo conseguir esto?


¿Qué sucede si desea aplicar la tarea de reemplazo recursivamente ? ¿Cómo lo harías tú?

Bueno, acabo de encontrar la respuesta yo mismo. No es la solución más elegante (intenta renombrar también archivos que no cumplen con la condición) pero funciona. (Por cierto, en mi caso necesitaba cambiar el nombre de los archivos con ''% 20'', no con un guión bajo)

#!/bin/bash find . -type d | while read N do ( cd "$N" if test "$?" = "0" then for file in *; do mv "$file" ${file// /%20}; done fi ) done


Cita tus variables:

for file in *; do echo mv "''$file''" "${file// /_}"; done

Elimine el "eco" para hacer el cambio de nombre real.



Esto debería hacerlo:

for file in *; do mv "$file" `echo $file | tr '' '' ''_''` ; done


La forma más fácil de reemplazar una cadena (carácter de espacio en su caso) con otra cadena en Linux es usar sed . Puedes hacerlo de la siguiente manera

sed -i ''s//s/_/g'' *

Espero que esto ayude.


Para cambiar el nombre de todos los archivos con una extensión .py use, find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%" find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"

Muestra de salida,

$ find . -iname "*.py" -type f ./Sample File.py ./Sample/Sample File.py $ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%" $ find . -iname "*.py" -type f ./Sample/Sample_File.py ./Sample_File.py


Prefiero usar el comando ''rename'', que toma expresiones regulares al estilo Perl:

rename "s/ /_/g" *

Puedes hacer una carrera en seco con la bandera -n:

rename -n "s/ /_/g" *


Pruebe algo como esto, suponiendo que todos sus archivos fueran .txt:

for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done


Si usas bash:

for file in *; do mv "$file" ${file// /_}; done


Usa sh ...

for i in *'' ''*; do mv "$i" `echo $i | sed -e ''s/ /_/g''`; done

Si quieres probar esto antes de apretar el gatillo, simplemente cambia mv a echo mv .