¿Cuál es la forma más fácil de eliminar la línea "total <tamaño>" de la salida de ls -l?

14

Lo mejor que pude encontrar a través de Google / man lsfue:

ls -l | grep -v '^total'

¿Hay algo que me falta en las banderas ls?

Además, ¿por qué el tamaño total en kb, independientemente de la bandera -h? tachar eso, parece que sí, no estoy seguro de lo que estaba viendo entonces.

Tom
fuente
44
Quizás podría ser un poco más eficiente ls -l | tail -n+2, por lo demás no tengo una respuesta.
enzotib
Me gusta más el método de enzotib. Sugerencia: configúrelo como un alias y asígnele un nombre lsl. Solo 3 letras;) oh y ls -lh me muestran 1.2K tamaños con estilo.
Rinzwind
Creo que has conseguido el camino más fácil.
Robert

Respuestas:

11

Mirando el código fuente de coreutils, descubrí que totalsiempre se mostrará al usar la -lopción en los directorios .

El uso de la -dopción para enumerar las entradas en lugar de ocultar el contenido del directorio total. Pero si lo ejecuta sin argumentos (o en un directorio), solo mostrará el directorio y no su contenido. Por lo tanto, necesita comodines. *coincide con todos los archivos y .*coincide también con los archivos ocultos (que corresponde con la -aopción):

ls -ld * .*

En cuanto a la -hopción, funciona para mí. 1118360 bytes aparecen como 1.1M. Los archivos de menos de 1024 aparecen en bytes.

Lekensteyn
fuente
1
En realidad, -d enumera directorios en lugar de entradas.
H2ONaCl
@broiyan Puede llevar la lspágina del manual al pie de la letra o considerar esto: ls /puede interpretarse como "enumere la entrada /si es un archivo o el contenido del directorio /si es un directorio". El uso -delimina la última condición y siempre imprimirá la entrada en lugar del contenido del directorio. Esto se aplica sin importar si una ruta es un archivo o directorio.
Lekensteyn
Votaría esto de nuevo si pudiera
dps
6

El uso de comodines para evitar que se lsejecute la lista de directorios es subóptimo, ya que le impide usar lsopciones como --almost-all.

Al igual que la sugerencia de Enzotib , la forma más sencilla de eliminarlo es canalizarlo tailpara cortar la primera línea. Sin embargo, lsdetectará que su salida es una tubería en lugar de interactiva y cambiará sus valores predeterminados de forma no deseada. Por lo tanto, para hacerlo robusto, también debe agregar algunas opciones:

  • --color=always: sigue mostrando colores
  • --hide-control-chars: imprime ?nombres de archivos en lugar de caracteres de control que podrían estropear la salida de la consola

Tengo un script ~/bin/l(también puedes usar un alias Bash en ~/.bash_aliases):

#!/bin/bash
ls -l --color=always --hide-control-chars "$@" | tail --lines=+2

También puede agregar cualquier otra lsopción que desee de forma predeterminada, por ejemplo --group-directories-first --time-style='+%FT%T.%N%:::z' --indicator-style=slash.

Caracol mecánico
fuente
Sin embargo, esto no funcionará si pasa varios nombres de archivo a ls.
Sparhawk
2

ls -l *

Le dará el contenido de la carpeta "normalmente nombrado" sin el total. Eso podría ser adecuado para sus necesidades. Desafortunadamente, no le dará los dotarchivos con prefijo. Si lo usa ls -l * .*, obtendrá un desastre ya que Linux navegará hacia arriba en el árbol.

Tenga en cuenta que el prefijo de punto podría significar la carpeta o, con un comodín, significa la carpeta anterior, por lo que no le ayuda a elegir archivos normales con prefijo de punto. Esto parece haber sido una decisión de diseño desafortunada.

H2ONaCl
fuente
0

$ ls -l [DIRECTORY] | sed 1d
(la salida contiene nombres de archivo)

$ ls -ld [path-to-dir]/*
(la salida contiene rutas relativas pero conservará los colores)

$ ls -l [DIRECTORY] | tail -n +2

$ ls -l [DIRECTORY] | awk 'NR>=1'


Nota:
Lo siguiente no funciona si tiene un archivo llamado "total ..."

$ ls -l | grep -v '^total'

Robert Vila
fuente