Nombré varios archivos con espacios en ellos y quiero reemplazar el espacio con _
. Sin embargo, cada vez que escribo un comando en el shell con el nombre del archivo (por ejemplo Spring 2011
), el shell no reconoce el archivo o directorio.
¿Qué puedo hacer sobre esto? ¿Hay alguna forma de usar el carácter unicode para un espacio?
bash
bucle for: vea mi solución aquí .Respuestas:
Escapar del espacio, por ejemplo
Spring\ 2011
, o usar comillas, por ejemplo'Spring 2011'
. En el futuro, generalmente es una mala idea usar nombres de archivo con espacios en ellos en cualquier * NIX.Si tienes
rename
, puedes usar esto:fuente
rename
versión 2.23)Si su máquina tiene el comando de cambio de nombre , esto cambiará todos los espacios a guiones bajos en todos los archivos / directorios en el directorio de trabajo actual:
fuente
rename --version
rename from util-linux 2.23.2
.Si no tiene
rename
o prefiere usar solo el shell:Desglosado:
*\ *
selecciona todos los archivos con un espacio en su nombre como entrada para elfor
bucle."$f"
son importantes porque sabemos que hay un espacio en el nombre del archivo y, de lo contrario, aparecería como 2+ argumentos paramv
.${f//str/new_str}
es una característica de sustitución de cadena específica de bash. Todas las instancias destr
se reemplazan connew_str
.fuente
for f in *\ *; do mv "$f" "${f// /_}"; done
funcionamv "Spring 2011.file" Spring_2011.file
debería decirle a la línea de comandos que tome la cadena entre comillas como una sola entrada.fuente
Para cambiar el nombre de los archivos N mediante programación, puede usar un
bash
bucle for simple .Si tiene menos de 5 nombres de archivo, puede escribir manualmente todos los nombres de archivo y usar el
rename
comando como sugiere la solución anterior . Pero para mí ... prefiero la solución programática ... incluso cuando solo hay 4 archivos.PD
Si no está familiarizado con
Bash
la expansión de parámetros (es decir${filename// /_}
), puede usar elrename
comando:fuente