How to: reemplazar los espacios de los nombres de archivo por guiones bajos
En los entornos Unix se trabaja bastante con el intérprete de comandos, de hecho, muchos sistemas no tienen ni un entorno de escritorio instalado. Por tanto, en Linux también se suele trabajar bastante desde el terminal. Cuando se trabaja con nombres de ficheros y directorios a veces es complicado cuando éstos tienen espacios en sus nombres. Sabiendo cómo saltar estos problemillas no habría problema, pero es cierto que es más cómodo cuando no tienen esos espacios…
Si no sabes cómo usar nombres con espacios desde el terminal o si quieres eliminar estos espacios de forma fácil, en este artículo aprenderás todo lo necesario para que la experiencia de usuario sea lo más cómoda cuando trabajes en el día a día en GNU/Linux. A partir de ahora, los espacios de los nombres no supondrán un obstáculo para ti…
Cómo trabajar con espacios
Trabajar con espacios en nombres es sencillo, así que primero voy a mostrar cómo se pueden usar directorios o ficheros con espacios en sus nombres. Así, todos aquellos que tienen problemas con esto podrán aprender a usarlo y perderán el miedo a toparse con nombres con espacios.
- Para indicar que existe un espacio en el nombre, puedes usar el slash o barra invertida, es decir, \. Por ejemplo, si el nombre que estás intentando escribir es el que ves en la imagen “RISC-V docs”, puedes escribir “RISC-V\ docs” (sin comillas). De esta forma le estarás indicando a Bash que se trata de un espacio y no que has introducido varios parámetros para ese comando separados por un espacio.
- También puedes usar las comillas dobles “” para encerrar el nombre con espacios, indicando al shell que no son parámetros separados, sino que es un mismo nombre. Por ejemplo, en el ejemplo anterior con cd, si quisieras ir a dicho directorio con espacios podrías usar:
cd "RISC-V docs"
- Otro truco es comenzar a escribir las primeras letras del nombre y pulsar la tecla Tabulador (la que hay justo por encima de Bloq Mayúsculas). De esa forma se autocompleta el nombre. Esto no funcionará si existen varios nombres que empiecen igual, por ejemplo, si existe un “RISC-V docs” y un “RISC-V isa” no serviría. Sí que funcionaría en el caso de haber un “RISC-V docs” y “RISC-I docs”, puesto que en cuanto introduzcas el carácter I sabrá el nombre del que se trata…
Ahora bien, esto puede que no te resulte práctico o simplemente no te guste tener que estar haciendo esto cada vez que trabajes con espacios. Por eso, si quieres eliminarlos, puedes leer el siguiente apartado…
Cómo reemplazar los espacios
Es cierto que para los entornos gráficos, los nombres con espacios son más cómodos y agradables para nombrar archivos. Pero no es tan práctico para el terminal. Por eso, si no quieres seguir los pasos del apartado anterior y quieres deshacerte de una vez por todas de los dichosos espacios, puedes seguir estos pasos:
- Ve al directorio donde se encuentren los nombres con espacios que quieras sustituir por cualquier carácter. En este caso he usado un guión bajo, pero puedes sustituir ese símbolo por cualquier otro, solo tienes que modificar el comando.
- Una vez dentro del directorio, puedes usar este comando que cambiará todos los espacios de nombres por _. Ten cuidado, porque si hay nombres en los que quieras conservar los espacios debes considerar que esta orden los cambiará todos:
for file in *; do mv "$file" `echo $file | tr ' ' '_'`; done
- Para ir uno a uno, aunque esto no sea práctico, puedes usar el siguiente comando en los casos en los que solo quieras sustituir los espacios para un solo nombre y no para todos de forma automática:
mv nombre\ con\ espacios nombre_sin_espacios
- Otra opción es usar un script que puedas invocar cada vez que quieras sustituir los espacios por guiones bajos. Así lo podrás ejecutar en cualquier directorio sin necesidad de escribir la orden cada vez que la necesites. Para eso tienes que usar tu editor de texto favorito y crear un fichero llamado, por ejemplo, spaceskiller.sh, guardar el contenido, darle permisos de ejecución, e introducirlo en una ruta de las que hay en la variable de entorno $PATH (p.e.: /usr/bin) y así solo deberás invocar su nombre, sin necesidad de indicar la ruta donde está el .sh. Vale, una vez dicho esto, el contenido del script sería el siguiente:
<pre>#!/bin/bash for f in * do new="${f// /_}" if [ "$new" != "$f" ] then if [ -e "$new" ] then echo no se renombró \""$f"\" porque \""$new"\" ya existe else echo renombrando "$f" a "$new" mv "$f" "$new" fi fi done</pre>
Si has optado por el script y lo has introducido en alguno de los directorios de $PATH, cada vez que estés dentro de un directorio y quieras sustituir los espacios por guiones bajos (o cualquier otro carácter si lo modificas), solo tendrás que ejecutar:
./spaceskiller.sh
Espero haberte ayudado con este tutorial, puedes dejar tus comentarios con cualquier duda o aportación…