Linux - Reemplazando espacios en los nombres de archivos
Pregunta
Tengo varios archivos en una carpeta y quiero reemplazar todos los caracteres de espacio en todos los nombres de archivo con guiones bajos. ¿Cómo puedo lograr esto?
Solución
Esto debería hacerlo:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
Otros consejos
Prefiero usar el comando 'renombrar', que toma expresiones regulares de estilo Perl:
rename "s/ /_/g" *
Puedes hacer un recorrido en seco con la marca -n:
rename -n "s/ /_/g" *
Usa sh ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Si desea probar esto antes de apretar el gatillo, simplemente cambie mv
a echo mv
.
¿Qué sucede si desea aplicar la tarea de reemplazo recursivamente ? ¿Cómo harías eso?
Bueno, acabo de encontrar la respuesta a mí mismo. No es la solución más elegante (intenta renombrar también los 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
Si usas bash:
for file in *; do mv "$file" ${file// /_}; done
Cita tus variables:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Eliminar el " eco " para hacer el cambio de nombre real.
Prueba algo como esto, asumiendo que todos tus archivos fueron de .txt:
for files in *.txt; do mv “$files” `echo $files | 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.
Aquí hay otra solución:
ls | awk '{printf("\"%s\"\n", <*>)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
- usa awk para agregar comillas alrededor del nombre del archivo
- usa sed para reemplazar el espacio con guiones bajos; imprime el nombre original con comillas (de awk); entonces el nombre sustituido
- xargs toma 2 líneas a la vez y lo pasa a mv
Creo que su respuesta está en Reemplace los espacios en los nombres de archivo con guiones bajos .
Para cambiar el nombre de todos los archivos con el uso de la extensión .py
,
encontrar . -iname " *. py " -tipo f | xargs -I% renombrar " s / / _ / g " "% "
Salida de muestra,
$ 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