Sortieren Sie alle Textdateien nach Größe, wodurch eine Textliste mit Pfaden erstellt wird

Sortieren Sie alle Textdateien nach Größe, wodurch eine Textliste mit Pfaden erstellt wird

Dadurch erhalte ich eine Liste mit den Pfaden zu allen Textdateien:

find / -type f -name '*.txt' > ~/Desktop/sorted.txt

Ich möchte diese Pfadliste nach der Dateigröße jedes Elements sortieren, bin mir aber nicht sicher, was ich verwenden soll. Das funktioniert nicht wie erwartet:

find / -type f -name '*.txt' |sort -S > ~/Desktop/sorted.txt

Irgendwelche Vorschläge?

Antwort1

Dieser Befehl verwendet wcfür jede passende Datei einen separaten Prozess, daher kann die Leistung beeinträchtigt sein. Ich habe ihn im Hinblick auf Kompatibilität und POSIX-Konformität erstellt.

find / -type f -name '*.txt' -exec wc -c {} \; | sort -t ' ' -n -k 1,1 | cut -d ' ' -f 2-

Jeder wc -cerzeugt eine Zeile in einem Formular

12345 /path/to/file/possibly with spaces/foo.txt

wobei das erste Leerzeichen die Byteanzahl vom Pfad trennt. sortruft alle Zeilen ab, verwendet das Leerzeichen als Feldtrennzeichen und sortiert numerisch nach dem ersten Feld, also nach der Byteanzahl. cutVerwendet dann das Leerzeichen als Feldtrennzeichen und druckt aus dem zweiten Feld, also alles außer dem ersten Feld, also alles außer der Byteanzahl, also die Pfade.

Die Lösung kann leicht angepasst werden, um nach Zeilenanzahl zu sortieren: Verwenden Sie einfach wc -lanstelle von wc -c.


Hinweis:
Ein Pfad, der ein oder mehrere Zeilenumbruchzeichen enthält, beschädigt meinen Code. Um den Code dagegen immun zu machen, könnte man Tools verwenden, die Nullzeichen als Trennzeichen unterstützen. Mit POSIX-Tools ist dies schwierig, wenn überhaupt möglich. Diese Antwort konzentriert sich auf die Portabilität, daher sind hoffentlich alle Pfade zu Ihren Textdateien „nett“.

Antwort2

Sie können immer den (wahrscheinlich nicht optimalen) Ansatz wählen, Tools miteinander zu verketten:

find / -type f -name '*.txt' -ls  | sort -nk7,7 | awk '{print $NF;}'
  • Der -lsSchalter bei der Suche zeigt eine Reihe zusätzlicher Spalten an, einschließlich der Dateigröße (beim GNU-Toolset die 7. Spalte, kann unter MacOS anders sein).
  • Es sortwird eine numerische Sortierung in der 7. Spalte (Dateigröße) durchgeführt.
  • Das awkentfernt alle anderen Felder und druckt nur den Dateinamen

verwandte Informationen