Beginnt wie @Rajish, verwendet jedoch den printfBefehl from find, um das Ausgabeformat anzugeben. Es gibt 3 zeitbezogene Formate: atime, ctime und mtime - %Tgilt für mtime %Aund %Cfür die anderen Formate.
@Gibt das Zeitformat in Sekunden seit der Epoche an. %fsteht für den Dateinamen, \nfür einen Zeilenumbruch zwischen 2 Dateien.
Wenn Sie dann in umgekehrter Reihenfolge nach der Nummer sortieren, erhalten Sie zuerst die jüngsten Dateien, und wir nehmen 20 Zeilen¹ mit head.
Am Ende sedwird verwendet, um die Zeitinformationen wegzuwerfen.
¹) Da headzeilenweise gearbeitet wird, kann eine einzelne Datei mit mehr als 20 Zeilenumbrüchen im Namen, was etwas ungewöhnlich, aber nicht verboten ist, die Ausgabe verfälschen, wenn sie zu den ersten 20 Übereinstimmungen gehört. Wenn Sie solche Dateien haben, versuchen Sie bitte, sie zu entfernen, um ihren Namen zu ändern. Sie sind häufig ein Problem für einfache Skripte.
Wenn Sie file‚s -lsBefehl, werden die Sonderzeichen als Backslash-Escape - Zeichen gedruckt werden: find . -maxdepth 1 -size +20M -printf "%T@ " -ls | sort -nr | head -n 20 | sed 's/[^ ]\+ //'. Außerdem sieht das Format so aus ls -l, als hätte EoghanM auch -lsowieso angegeben .
Manatwork
printffunktioniert nur für bestimmte GNU-Distributionen.
Brethlosze
%T+generiert vom Menschen lesbare Zeitstempel, 2018-11-06+13:37:54.4606466460die auch nach sort(ohne -n) sortiert werden können
Ciro Santilli am
5
Zshs Glob-Qualifikanten machen dies einfach. Das .Qualifikationsmerkmal wählt nur reguläre Dateien aus und Lm+20wählt Dateien aus, die mindestens 20 MB plus 1 Byte lang sind. Verwenden Sie diese Option, um Dateien mit einer Länge von genau 20 MB einzuschließen L+20971519. Dann omsortiert die durch Modifikation der Zeit abnehmen, und [1,10]begrenzt die Erweiterung auf die ersten 10 Übereinstimmungen. Sie benötigen weiterhin die -tOption, lsum die Dateien nach Datum aufzulisten. oder Sie können die Dateien an einen anderen Befehl übergeben (jüngster zuerst). Um die Dateien zuerst an einen anderen Befehl mit der ältesten Datei Omzu übergeben, sortieren Sie sie nach der Änderungszeit und [-10,-1]extrahieren Sie die letzten 10 Übereinstimmungen.
ls -ltr -- *(.Lm+20om[1,10])
echo *(.Lm+20Om[-10,-1])
Ich denke, das könnte ein besserer Weg sein, um das Problem zu lösen ...
find . -maxdepth 1 -type f -size +20M -exec ls -Shal {} \+ | head
Um Fehler bei der Suche zu beseitigen, versuchen Sie, auf Dateien zuzugreifen, für die Sie keine Leseberechtigung haben. Fügen Sie diese möglicherweise hinzu
find . -maxdepth 1 -type f -size +20M -exec ls -Shal {} \+ 2> /dev/null | head
Danke für alle Antworten. Für was ich gegangen bin, ist das folgende:
ls -halt | grep "M " |head
Obwohl die 20 Megabyte zugunsten von mehr als einem Megabyte (und weniger als einem Gigabyte) weggelassen werden, ist es leicht zu merken und bewahrt das für den Menschen lesbare Element der Dateigrößen.
Sie sollten nicht versuchen, die Ausgabe von zu analysieren ls, es zeigt Ihnen eine Darstellung von Dateien, nichts weiter. Bei einfachen Dateinamen entspricht die Ausgabe meistens dem Dateinamen, Sie sollten sich jedoch nicht darauf verlassen.
Chris Down
Ich bin mir sicher, dass dies in Bezug auf einen menschlichen Benutzer (und die Ausgabe, die nicht an eine andere Stelle weitergeleitet wird) leichter zu merken ist, da es mit bekannten einfachen Tools einfacher zusammengestellt werden kann. Tldp.org/LDP/GNU-Linux- Tools-Summary / html / c1089.htm
file
‚s-ls
Befehl, werden die Sonderzeichen als Backslash-Escape - Zeichen gedruckt werden:find . -maxdepth 1 -size +20M -printf "%T@ " -ls | sort -nr | head -n 20 | sed 's/[^ ]\+ //'
. Außerdem sieht das Format so ausls -l
, als hätte EoghanM auch-l
sowieso angegeben .printf
funktioniert nur für bestimmte GNU-Distributionen.%T+
generiert vom Menschen lesbare Zeitstempel,2018-11-06+13:37:54.4606466460
die auch nachsort
(ohne-n
) sortiert werden könnenZshs Glob-Qualifikanten machen dies einfach. Das
.
Qualifikationsmerkmal wählt nur reguläre Dateien aus undLm+20
wählt Dateien aus, die mindestens 20 MB plus 1 Byte lang sind. Verwenden Sie diese Option, um Dateien mit einer Länge von genau 20 MB einzuschließenL+20971519
. Dannom
sortiert die durch Modifikation der Zeit abnehmen, und[1,10]
begrenzt die Erweiterung auf die ersten 10 Übereinstimmungen. Sie benötigen weiterhin die-t
Option,ls
um die Dateien nach Datum aufzulisten. oder Sie können die Dateien an einen anderen Befehl übergeben (jüngster zuerst). Um die Dateien zuerst an einen anderen Befehl mit der ältesten DateiOm
zu übergeben, sortieren Sie sie nach der Änderungszeit und[-10,-1]
extrahieren Sie die letzten 10 Übereinstimmungen.quelle
Ich denke, das könnte ein besserer Weg sein, um das Problem zu lösen ...
Um Fehler bei der Suche zu beseitigen, versuchen Sie, auf Dateien zuzugreifen, für die Sie keine Leseberechtigung haben. Fügen Sie diese möglicherweise hinzu
quelle
Dies druckt nur die angegebenen 10 Dateien, unabhängig von eingebetteten Zeilenumbrüchen in Dateinamen. Es verwendet Dateisystem
inodes
quelle
Danke für alle Antworten. Für was ich gegangen bin, ist das folgende:
Obwohl die 20 Megabyte zugunsten von mehr als einem Megabyte (und weniger als einem Gigabyte) weggelassen werden, ist es leicht zu merken und bewahrt das für den Menschen lesbare Element der Dateigrößen.
quelle
ls
, es zeigt Ihnen eine Darstellung von Dateien, nichts weiter. Bei einfachen Dateinamen entspricht die Ausgabe meistens dem Dateinamen, Sie sollten sich jedoch nicht darauf verlassen.