Tengo varios archivos en una carpeta y quiero reemplazar cada carácter de espacio en todos los nombres de archivo con guiones bajos. ¿Cómo puedo conseguir esto?
Tengo varios archivos en una carpeta y quiero reemplazar cada carácter de espacio en todos los nombres de archivo con guiones bajos. ¿Cómo puedo conseguir esto?
Respuestas:
Esto debería hacerlo:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
*
a PATH_TO_YOUR_DIRECTORY
.
Prefiero usar el comando 'renombrar', que toma expresiones regulares de estilo Perl:
rename "s/ /_/g" *
Puedes hacer un ensayo con la bandera -n:
rename -n "s/ /_/g" *
rename " " "_" *
rename
no está disponible en OSX, parece.
rename
está disponible.
Usa sh ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Si desea probar esto antes de apretar el gatillo, cambie mv
a echo mv
.
Si usa bash:
for file in *; do mv "$file" ${file// /_}; done
mv --help' for more information. mv: when moving multiple files, last argument must be a directory Try
mv --help 'para obtener más información.
mv --help' for more information. mv: missing file argument Try
mv --help 'para obtener más información. mv: falta el argumento del archivo. Pruebe mv --help' for more information. mv: missing file argument Try
mv --help 'para obtener más información.
¿Qué sucede si desea aplicar la tarea de reemplazo de forma recursiva ? ¿Cómo lo harías tú?
Bueno, yo mismo encontré la respuesta. No es la solución más elegante (también intenta cambiar el nombre de 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
Intente algo como esto, asumiendo que todos sus archivos eran .txt:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
tr --help' for more information. mv: missing file argument Try
mv --help 'para obtener más información.
Aquí hay otra solución:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
Cotiza tus variables:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Elimine el "eco" para hacer el cambio de nombre real.
\'1130 lake micigan view.jpg\'': No such file or directory mv: cannot stat
\ '1130_1_bedroom_floor_plan.jpg \' ': No existe tal archivo o directorio mv: can't stat \'1130_BedPicture_8.jpg\'': No such file or directory mv: cannot stat
\' 1130_diningroom_table.jpg \ '': No existe tal archivo o directorio
La forma más fácil de reemplazar una cadena (carácter de espacio en su caso) con otra cadena en Linux
es usando sed
. Puedes hacerlo de la siguiente manera
sed -i 's/\s/_/g' *
Espero que esto ayude.
Creo que su respuesta está en Reemplazar espacios en nombres de archivos con guiones bajos .
Para cambiar el nombre de todos los archivos con una .py
extensión, use,
find . -iname "*.py" -type f | xargs -I% rename "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
1 - foo.jpg
y mi carpeta ya la tenía1.jpg
.