Cada cierto tiempo, al crear scripts en Bash (aunque cada vez utilizo más Python para estos «menesteres») me suelo encontrar con la necesidad de recorrer un listado de ficheros en disco que incluyen espacios y/o caracteres especiales en el nombre.
Dejo aquí esta nota para la próxima vez que me de problemas utilizar el bucle «for» desde la terminal 😉
A la hora de recorrer ficheros en disco, se suele utilizar el bucle «for» pero, si hay espacios en el nombre
lo má sencillo es hacerlo del siguiente modo:
for f in *.log; do echo "Fichero: $f"; done
Donde:
- *.log filtrará todos los ficheros con extensión .log (en la imagen de arriba se ve que he usado varios ficheros con espacios en el nombre y distinta extensión). Puedes cambiar la extensión .log (por la que necesites) o quitarla directamente (* para procesar todos los ficheros en el directorio)
- f es la variable que utilizaremos para recorrer los distintos ficheros del directorio
- $f es para mostrar el nombre del fichero dentro de la cadena «Fichero: xxxxx»
- Se usa «;» como separador de comandos buscando poder procesar los ficheros utilizando una única línea y no tener que crear un script en Bash.
Conclusión
Truco realmente sencillo para operar sobre los ficheros (tengan o no espacios en el nombre) de determinado directorio desde la línea de comandos.
Y tú…
- ¿Cómo sueles lidiar con los espacios en Bash?
- ¿Eres de usar el bucle for o el comando find?
- ¿Conocías esta posibilidad?
- …
Me gustan mucho estos truquillos con Bash, aunque se me hace un lenguaje algo dificil. La verdad es que el modulo OS de python se me hace muchísimo más fácil de manejar para esta clase de tareas y respecto a velocidad de ejecución a menos que estés trabajando con un lote enorme, es inapreciable.
Con esto y un mv, ejercicios para renombrar archivos automáticamente!!
Me gustaMe gusta
Como comenté, cada día uso más Python (por potencia y portabilidad a otras plataformas) pero, hay veces que, con una línea de código (como la del ejemplo) y sin tener que editar un script (con más líneas de la cuenta) resuelvo problemas como el planteado 😉
La idea de renombrar no está mal pero soy más de PyRenamer (realmente espectacular para esos menesteres)
Gracias por compartir impresiones Zetto
Me gustaMe gusta
Truco bueno, lo de poner la variable entre comillas dobles debería caer en el temario de la oposición 😉
Me gustaMe gusta
No mientes ruina… XD
Me gustaMe gusta