Was ist der einfachste Weg, um die Zeile "total <size>" aus der Ausgabe von ls -l zu entfernen?

14

Das Beste, was ich über Google finden konnte / man lswar:

ls -l | grep -v '^total'

Fehlt mir etwas in den Flaggen ls?

Warum wird die Gesamtgröße in KB angegeben, unabhängig vom Flag -h? Kratz das, scheint es zu tun, nicht sicher, was ich damals sah.

Tom
quelle
4
Vielleicht könnte ein bisschen effizienter sein ls -l | tail -n+2, im Übrigen habe ich keine Antwort.
Enzotib
Ich mag die Methode von Enzotib mehr. Vorschlag: Als Alias ​​einrichten und benennen lsl. Nur 3 buchstaben;) oh und ls -lh zeigt mir größen im 1,2 kt stil.
Rinzwind,
Ich denke, Sie haben den einfachsten Weg gefunden.
Robert

Antworten:

11

Beim Betrachten des Quellcodes von habe coreutilsich herausgefunden, dass totaldieser bei Verwendung der -lOption für Verzeichnisse immer angezeigt wird .

Wenn Sie die -dOption zum Auflisten von Einträgen anstelle von Verzeichnisinhalten verwenden, werden diese ausgeblendet total. Wenn Sie dies jedoch ohne Argumente (oder in einem Verzeichnis) ausführen, wird nur das Verzeichnis und nicht der Inhalt angezeigt. Daher benötigen Sie Platzhalter. *stimmt mit allen Dateien .*überein und stimmt auch mit versteckten Dateien überein (was der -aOption entspricht):

ls -ld * .*

Die -hOption funktioniert bei mir. 1118360 Bytes werden als 1,1 MB angezeigt. Dateien, die kleiner als 1024 sind, werden in Bytes angezeigt.

Lekensteyn
quelle
1
Tatsächlich listet -d Verzeichnisse anstelle von Einträgen auf.
H2ONaCl
@broiyan Sie können die lsHandbuchseite zum Buchstaben nehmen oder dies berücksichtigen: ls /kann als " Auflisten des Eintrags, /wenn es sich um eine Datei handelt, oder als Verzeichnisinhalt, /wenn es sich um ein Verzeichnis handelt" interpretiert werden . Mit -dwird die letzte Bedingung entfernt und der Eintrag anstelle des Verzeichnisinhalts gedruckt. Dies gilt unabhängig davon, ob es sich bei einem Pfad um eine Datei oder ein Verzeichnis handelt.
Lekensteyn
Ich würde das noch einmal verbessern, wenn ich könnte
dps
6

Das Verwenden von Platzhaltern, um zu vermeiden, dass lsdie Verzeichnisliste ausgeführt wird, ist nicht optimal, da Sie dadurch keine lsOptionen wie verwenden können --almost-all.

Wie von Enzotib vorgeschlagen , besteht die einfachste Möglichkeit, es zu entfernen, darin, es durchzuleiten , um taildie erste Zeile abzuschneiden. Ermittelt lsjedoch, dass es sich bei seiner Ausgabe eher um eine Pipe als um eine interaktive handelt, und ändert die Standardeinstellungen auf unerwünschte Weise. Um es robust zu machen, sollten Sie daher auch einige Optionen hinzufügen:

  • --color=always: Zeige weiterhin Farben
  • --hide-control-chars: Drucken Sie ?Dateinamen anstelle von Steuerzeichen ein, die die Konsolenausgabe durcheinander bringen könnten

Ich habe ein Skript ~/bin/l(Sie können auch einen Bash-Alias ​​verwenden ~/.bash_aliases):

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

Sie können auch andere lsOptionen hinzufügen , die Sie standardmäßig möchten, z --group-directories-first --time-style='+%FT%T.%N%:::z' --indicator-style=slash.

Mechanische Schnecke
quelle
Dies funktioniert jedoch nicht, wenn Sie mehrere Dateinamen an ls übergeben.
Sparhawk
2

ls -l *

Gibt Ihnen "normal benannte" Ordnerinhalte ohne das total. Das könnte für Ihre Bedürfnisse geeignet sein. Leider werden Ihnen die dotvorangestellten Dateien nicht angezeigt. Wenn Sie verwenden ls -l * .*, werden Sie ein Chaos bekommen, da Linux den Baum hinauf navigiert.

Beachten Sie, dass das Punktpräfix den Ordner oder mit einem Platzhalter den obigen Ordner bedeuten kann, sodass Sie keine regulären Dateien mit dem Punktpräfix auswählen können. Dies scheint eine unglückliche Designentscheidung gewesen zu sein.

H2ONaCl
quelle
0

$ ls -l [DIRECTORY] | sed 1d
(Ausgabe enthält Dateinamen)

$ ls -ld [path-to-dir]/*
(Die Ausgabe enthält relative Pfade, behält jedoch die Farben bei.)

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

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


Hinweis:
Folgendes funktioniert nicht, wenn Sie eine Datei mit dem Namen "total ...." haben.

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

Robert Vila
quelle