¿Cómo se ls -l
puede modificar la salida de para separar campos usando pestañas en lugar de espacios? Quiero pegar el resultado en una hoja de cálculo; El relleno con un número variable de espacios hace que sea difícil hacerlo. Para ilustrar:
drwxr-xr-x 2 root root 4096 26 de septiembre 11:43 wpa_supplicant -rw-r ----- 1 marcación raíz 66 26 de septiembre 11:43 wvdial.conf drwxr-xr-x 9 root root 4096 8 de octubre 08:21 X11 drwxr-xr-x 12 root root 4096 18 de febrero 23:31 xdg drwxr-xr-x 2 root root 4096 31 de enero 06:11 xml drwxr-xr-x 2 root root 4096 22 de noviembre 07:26 xul-ext -rw-r - r-- 1 raíz raíz 349 13 de enero de 2012 zsh_command_not_found
En el extracto que se ls -l /etc
muestra arriba, las filas 1, 2 y 3 tienen un solo dígito en la columna 2, mientras que la fila 4 tiene dos. Eso significa que la alineación se logra mediante el uso de dos espacios para separar las columnas 1 y 2 en las filas 1-3, pero solo un espacio en la fila 4.
ls
dice , analizar su salida está bien. Ese rara vez es el objetivo. Podría decirse que está aquí. ¡Creo que el método que ha utilizado es bastante bueno (cualquier método producirá resultados no deseados dado un conjunto de necesidades)! Sin embargo, podría decirse que el análisisls
podría ser mejor. Considere el caso de un nombre de archivo que realmente tiene un carácter de tabulación.ls -l
reemplaza la pestaña con un?
personaje. Su script conserva el carácter de tabulación, que creará columnas adicionales si su salida se interpreta como delimitada por tabuladores y se utiliza para crear una hoja de cálculo. Se degrada mal si un nombre de archivo tiene una nueva línea.\n
o\t
en sus nombres. Si lo hacen, entonces analizar la salida dels
con simples comandos bash será más complejo, pero se puede lograr. Puedo actualizar la respuesta, si el OP quiere manejar tales casos.\n
y\t
en sus nombres.printf "%s\t%s\t%s\t%s\r\n" $mod_month $mod_day $mod_time $file
y para redirigir la salida del archivo como./ls_tab.sh > listing.txt
.Tratar:
O, si sus nombres de archivo tienen espacios:
fuente
awk
sirve. ¡Inteligente!$9
no cambia el hecho de queawk
siempre ha interpretado los espacios como indicando un salto entre columnas.$9
captura solo la primera palabra en esa posición, y dado que las otras palabras se consideran columnas separadas y de mayor número, nunca se imprimen en absoluto.Ni siquiera necesitamos convertir la salida como Tab Delimitado. El espacio entre columnas es lo suficientemente fino.
Ejecute su
ls -l
comando en la terminal como lo hace normalmente y copie el contenido que desea pegar en una hoja de cálculo.A continuación, abra su programa de hoja de cálculo (LibreOffice Calc en mi caso) y presione Ctrl+ Vpara pegar el contenido de su portapapeles.
Aparecería el Asistente de importación de texto. Asegúrese de poner una marca de verificación al lado
Space
y presione Ok. Puede ver la vista previa en el panel inferior.fuente
Python es bueno para esto:
fuente