Qual è il modo più semplice per rimuovere la riga "total <size>" dall'output di ls -l?


14

Il migliore che ho trovato su Google / è man lsstato:

ls -l | grep -v '^total'

C'è qualcosa che mi manca tra le bandiere ls?

Inoltre, perché la dimensione totale è in kb, indipendentemente dal flag -h? grattalo, sembra così, non so cosa stavo vedendo allora.


4
Forse un po 'più efficiente potrebbe essere ls -l | tail -n+2, per il resto non ho una risposta.
enzotib,

Mi piace di più il metodo enzotib. Suggerimento: impostalo come alias e chiamalo lsl. Solo 3 lettere;) oh e ls -lh mi mostra dimensioni in stile 1.2K.
Rinzwind,

Penso che tu abbia ottenuto il modo più semplice.
Robert,

Risposte:


11

Guardando nel codice sorgente di coreutils, ho scoperto che totalverrà sempre visualizzato quando si utilizza l' -lopzione nelle directory .

L'utilizzo -ddell'opzione per elencare le voci anziché i contenuti della directory nasconde total. Ma se lo esegui senza argomenti (o su una directory), mostrerà solo la directory e non il suo contenuto. Pertanto, sono necessari caratteri jolly. *corrisponde a tutti i file e .*corrisponde anche ai file nascosti (che corrisponde -aall'opzione):

ls -ld * .*

Per quanto riguarda l' -hopzione, funziona per me. 1118360 byte visualizzati come 1.1M. I file inferiori a 1024 vengono visualizzati in byte.


1
in realtà -d elenca le directory anziché le voci.
H2ONaCl

@broiyan Puoi portare la lspagina di manuale alla lettera o considerare questo: ls /può essere interpretato come "elenca la voce /se è un file o il contenuto della directory /se è una directory". L'uso -drimuove l'ultima condizione e stampa sempre la voce anziché il contenuto della directory. Ciò vale indipendentemente dal fatto che un percorso sia un file o una directory.
Lekensteyn,

Mi piacerebbe upvote di nuovo se potessi
DPS

6

L'uso di caratteri jolly per evitare di lseseguire l'elenco delle directory non è ottimale, perché ti impedisce di utilizzare lsopzioni come --almost-all.

Come il suggerimento di Enzotib , il modo più semplice per rimuoverlo è convogliarlotail per tagliare la prima riga. Tuttavia, lsrileverà che il suo output è una pipe piuttosto che interattivo e cambierà le sue impostazioni predefinite in modo indesiderato. Quindi, per renderlo robusto, dovresti anche aggiungere alcune opzioni:

  • --color=always: continua a mostrare i colori
  • --hide-control-chars: stampa ?nei nomi dei file al posto dei caratteri di controllo che potrebbero rovinare l'output della console

Ho uno script ~/bin/l(puoi anche usare un alias Bash in ~/.bash_aliases):

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

Puoi anche aggiungere qualsiasi altra lsopzione che desideri per impostazione predefinita, ad es --group-directories-first --time-style='+%FT%T.%N%:::z' --indicator-style=slash.


Tuttavia, questo non funzionerà se si passano più nomi di file a ls.
Sparhawk,

2

ls -l *

Ti darà il contenuto della cartella "di nome normale" senza il total. Potrebbe essere adatto alle tue esigenze. Sfortunatamente, non ti darà i dotfile con prefisso. Se lo usi ls -l * .*, otterrai un pasticcio poiché Linux navigherà nell'albero.

Nota che il prefisso punto potrebbe significare la cartella o con un carattere jolly significa la cartella sopra, quindi non ti aiuta a scegliere i file regolari con il punto prefisso. Questa sembra essere stata una decisione sfortunata sul design.


0

$ ls -l [DIRECTORY] | sed 1d
(l'output contiene nomi di file)

$ ls -ld [path-to-dir]/*
(l'output contiene percorsi relativi ma conserva i colori)

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

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


Nota: quanto
segue non funziona se si dispone di un file denominato "totale ...."

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.