Linux zeigt nur Datum und Größe des Dateinamens an


72

Wie kann ich unter lsLinux eine Auflistung der Dateinamen nur für Datum und Größe erstellen? Ich muss die anderen Informationen wie Eigentümer oder Erlaubnis nicht sehen. Ist das möglich?


1
lsist großartig, weil es sehr schnell nach Datum und Uhrzeit sortiert, aber die Formatierung ist schwer zu handhaben. Ich schlage vor, ein Token im --time-Stil zu verwenden, etwa --time-style='+&%Y%m%d+%H%M%S.%N'wenn das Token '&' ist. Wenn Sie dies als Referenz verwenden, können Sie die Ausgabe weiter analysieren, seddamit Sie auch zurückverfolgen können, bevor das Token die Größe hat! Wenn jemand das als vollständige Antwort posten möchte, zögern Sie nicht, ich schlafe gerade :)
Aquarius Power

Antworten:


98

Warum nicht statstatt verwenden ls?

stat -c "%y %s %n" *

1
Das ist nett, aber es hat möglicherweise das Problem "Umgebung zu groß" / "Argumentliste zu lang".
Mat

4
:-) Nur ein Proof of Concept. In Real Life [tm] ist dies einfind . -type f -print0 | xargs -0 stat -c "%y %s %n"
f4m8

5
Um die Ausgabe zu formatieren stat, können Sie hinzufügen Breite Informationen zu dem Formatstring wie C printf Funktion, zum Beispiel "%y %8s %n", es ist nicht dokumentiert, aber scheint Werke (coreutils 8.17, Fedora 18)
Liuyan刘研

Denn mit lskann ich es mit tausend Trennzeichen ausgeben. Wie funktioniert das stat?
Al Bundy

Ich verstehe nicht, wie dies die Frage beantwortet ?! Es ist eine nette Lösung, die über den Tellerrand hinausgeht, aber Sie würden alle Vorteile verlieren ls. Was ist mit Farben?
MS Berends

30

Sie können mit dem findDienstprogramm eine Menge Kontrolle darüber erhalten, wie Sie Dateien auflisten. lsSie können die gewünschten Spalten nicht wirklich angeben.

Zum Beispiel:

$ find . -maxdepth 1 -printf '%CY%Cm%Cd.%CH%CM\t%s\t%f\n'
20111007.0601   4096    .
20111007.0601   2   b
20111001.1322   4096    a

Das Argument für die printfAktion ist in der Manpage detailliert. Sie können verschiedene Zeitinformationen, die gewünschte Größe (Dateigröße oder verwendete Plattenblöcke) usw. auswählen. Sie können dies auch für ungewöhnliche Dateinamen sicher machen, wenn weitere Verarbeitung erforderlich ist.


1
Die oben zu findende Eingabe ('% CY% Cm% Cd.% C ...') ist lang. Zumindest hat GNU find %C+(Ausgabe "2016-08-29 + 10: 57: 56.9201257840") und %Cc(Ausgabe "Mo 29 Aug 2016 10:57:56 CEST")
guettli

Ich wünschte, das würde auf Macs funktionieren.
Jerinaw

Schön, und wenn Sie nur den vollständigen Pfad und die Größe drucken möchten, sollte dies funktionieren "find / path / to / -printf '% h /% f% s \ n'"
Pierluigi Vernetto

24

Sie können jederzeit ein anderes Dienstprogramm verwenden, awkum die Ausgabe von ls1 zu formatieren :

/bin/ls -ls | awk '{print $7,$8,$9}'


1.Ja, im Allgemeinen sollten Sie die Ausgabe von ls nicht analysieren, aber in diesem Fall verlangt die Frage dies ausdrücklich ...


Die Dateigröße wird jedoch nicht gedruckt. Und es wird nur der erste Teil der Dateinamen mit Leerzeichen gedruckt. Und es kann scheitern, wenn lsAlias ​​ist (sagen wir alias ls='ls -i'). Sie sollten wirklich sehr vorsichtig sein, wenn Sie ls-Ausgaben analysieren möchten.
Mat

Ich hatte die Dateigröße dort und bearbeitete sie dann heraus (vager Moment) - ich stelle sie wieder her. Und ich stimme allen Vorbehalten beim Parsen zu ls, aber
genau

Ich bin anderer Meinung, das OP will die Dateinamen, nicht den ersten Teil der Dateinamen, wenn der Dateiname Whitespace hat. (Mit /bin/lswürde das Alias-Problem
Mat

Das wird implizit verstanden : Es wird ausdrücklich darauf hingewiesen, dass OP eine Lösung wünscht, mit lsder wir uns beide einig sind, dass sie die Leerzeichen-Anforderung nicht erfüllen wird. Der /bin/lsVorschlag ist gut.
Jasonwryan

liebe diese Lösung; In Bezug auf frühere Kommentare zum Nichtdrucken der Größe können Sie die Größe mit ls abrufen und verwenden -h, um sie für den Menschen lesbar zu machen. Genauer gesagt verwendet I: ls -lah | awk '{print $5,$6,$7,$8}'was ergibt: 4.0K Jan 24 18:17. Zugegeben, die ursprüngliche Lösung sagt nichts über awk aus, aber unter Linux sollten wir davon ausgehen, dass die Ausgabe eines Prozesses immer die Eingabe für einen anderen Prozess ist, oder? ;)
abgordon

5

Sie können auch den Befehl 'date' verwenden. Es ist sehr einfach zu bedienen:

Datum -r [Dateiname]


Schön, das war neu für mich. Leider funktioniert es nicht für mehrere Dateien via Globbing: date -r foo*.txt->date: extra operand "foo2.txt"
guettli

4

Wenn Sie ls verwenden möchten, aber die richtige Größe beibehalten möchten, können Sie Folgendes verwenden:

ls -Ss1pq --block-size=1

1

wobei Leerzeichen als Trennzeichen definiert ist und f6 Feld 6 bedeutet

ls -lt | cut -d" " -f6-

2
es ist fehlgeschlagen, weil ls Leerzeichen zum Einrücken verwendet und manchmal -f6- ist, manchmal -f5- ist
Aquarius Power

1

Sie können zwei Befehle weiterleiten

ls -l|cut -d" " -f5

1
es ist fehlgeschlagen, weil ls Leerzeichen zum Einrücken verwendet und manchmal -f6- ist, manchmal -f5- ist
Aquarius Power

-1

ls -s1 gibt die Dateigröße und den Namen nur unter AIX zurück, nicht sicher über Linux


2
Können Sie erklären, wie / warum dies Ihrer Meinung nach die Frage beantwortet?
Scott
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.