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.
Creo que su respuesta está en Reemplazar espacios en nombres de archivo con guiones bajos .
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
.