¿Cómo se ls -lpuede 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 /etcmuestra 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.

lsdice , 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álisislspodría ser mejor. Considere el caso de un nombre de archivo que realmente tiene un carácter de tabulación.ls -lreemplaza 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.\no\ten sus nombres. Si lo hacen, entonces analizar la salida delscon simples comandos bash será más complejo, pero se puede lograr. Puedo actualizar la respuesta, si el OP quiere manejar tales casos.\ny\ten sus nombres.printf "%s\t%s\t%s\t%s\r\n" $mod_month $mod_day $mod_time $filey para redirigir la salida del archivo como./ls_tab.sh > listing.txt.Tratar:
O, si sus nombres de archivo tienen espacios:
fuente
awksirve. ¡Inteligente!$9no cambia el hecho de queawksiempre ha interpretado los espacios como indicando un salto entre columnas.$9captura 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 -lcomando 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
Spacey presione Ok. Puede ver la vista previa en el panel inferior.fuente
Python es bueno para esto:
fuente