¿Cómo reemplazar espacios en blanco en un nombre de archivo?

8

Lo intenté de la siguiente manera:

rename 'bla bla .txt' blabla.txt

Pero esto no funciona, ¿cuál es la sintaxis correcta para este caso?

NES
fuente

Respuestas:

15

No debería usar renamepara cambiar el nombre de un solo archivo, use mv(1) en su lugar.

Además, para escapar de whitepsace, prefije con un \:

"Ubuntu One"Ubuntu\ One

Tu comando sería

mv bla\ bla.txt blabla.txt
  • la barra diagonal inversa le dice a bash que el siguiente personaje es de alguna manera especial, por ejemplo, \apara 'campana', \para un espacio literal, etc.

    ver man ascii(7) para más

Alternativamente, dado que ahora está utilizando el comando correcto mv, puede citar el nombre de archivo si hay muchos espacios:

mv "bla    bla.txt" blabla.txt

(Esto sería bla\ \ \ \ bla.txten forma de escape)

  • En bash, las cadenas entre comillas (comillas simples o dobles) se tratan como un argumento único, mientras que las cadenas sin comillas se dividirán en varios argumentos, como este:

    • ["mv", "bla", "bla.txt", "blabla.txt", ]

    y mvespera:

    • ["mv", "source", "destination", ]
  • Nota: si escribe 'mv' y los primeros caracteres del nombre de archivo y presiona TAB, obtendrá la versión de escape del nombre del archivo, lo que hará que el cambio de nombre sea rápido y fácil.


renamese usa para procesar por lotes el cambio de nombre de los archivos utilizando expresiones regulares, como se demuestra en el ejemplo de su página de manual :

rename 's/\.bak$//' *.bak

Para eliminar cualquier aparición de .bak (al final de la cadena [$]) de todos los archivos que coinciden con "* .bak".

Stefano Palazzo
fuente
gracias, ¿cómo se vería el comando si hay muchos espacios en blanco en el nombre del archivo de origen? ¿hay una expresión regular simple para que no haya necesidad de escapar de cada espacio en blanco?
NES
Se actualizó la respuesta para abordar muchos espacios y comillas simples v. Dobles.
Stefano Palazzo
Hay una diferencia entre comillas simples y dobles, pero no es un problema para este problema. Vea este artículo para conocer los detalles exactos
Stefano Palazzo
4

rename es un comando especializado para renombrar en masa. Sin intuición, lo que normalmente llamamos "cambio de nombre" es en realidad un "movimiento" a un nuevo nombre:

mv 'bla bla .txt' blabla.txt
ændrük
fuente
¿Cuál es la diferencia entre escribir el nombre del archivo entre comillas simples y comillas dobles?
NES
44
Las comillas dobles permiten expandir las variables y sustituir el proceso; cita simple no lo hace. A=bla ; mv "$A $A .txt" blabla.txtmoverá bla bla .txt, pero A=bla ; mv '$A $A .txt' blabla.txtbuscará un archivo realmente llamado "$ A $ A .txt". Sin embargo, cualquiera funcionará para su ejemplo.
frabjous
1
rename "s/\s//g" "bla bla.txt"

s es el comando sed Substitute.

\ s es para whiteSpace

Estás reemplazando con nada. Otra secuencia de reemplazo va después de la segunda barra diagonal.

g es para Global, es decir, reemplazar cada instancia. Omitir g reemplaza solo la primera instancia.


Este comando reemplazará los espacios en blanco con guiones bajos en todos los archivos:

rename "s/\s/_/g" *
Nissim Nanach
fuente