Also, ich versuche Batch-Verarbeitung für viele Dateien durchzuführen, aber ich möchte die Batch-Verarbeitung mit den kleinsten Dateien zuerst starten. Ich muss alle Dateinamen in aufsteigender Reihenfolge sortieren, sortiert nach der Dateigröße. Ich habe einige Beispiele gesehen, aber ein Problem besteht darin, dass einige der Dateinamen Leerzeichen, Bindestriche, Unterstriche und andere Sonderzeichen enthalten, so dass ich nichts finden kann, was für mich funktioniert.Listen Sie Dateinamen in der Reihenfolge der Dateigröße in BASH
Antwort
ls -rS
wird den Trick tun. Der Mann Seite erklärt mehr: http://man7.org/linux/man-pages/man1/ls.1.html
find . -type f -print0 | xargs -0 wc -c | sort -n
Das obige Beispiel listet die Dateien im aktuellen Verzeichnis in aufsteigender Reihenfolge der Größe. Das Argument -print0
für den Befehl find weist es an, das Zeichen null '\0'
anstelle von Leerzeichen als Trennzeichen zwischen den Suchergebnissen zu verwenden. Auf der anderen Seite der Pipe bereiten die Argumente -0
den Befehl xargs
vor, um dasselbe zu tun. Dies behandelt Leerraumzeichen im Dateinamen als gewöhnliche Zeichen.
'finden. -type f-exec wc -c {} + | sort -n ist eine effizientere Alternative, die auch POSIX-konform ist ("print0" ist nicht). Das Problem besteht jedoch darin, dass "wc" mit mehr als einem Argument filename eine Zusammenfassungszeile in der Form "
If:
- sind Sie nicht besorgt über die Dateinamen mit eingebetteten newlines und
- Sie die tatsächlichen Dateigrößen nicht brauchen, sondern nur die von zugrunde liegenden Dateigröße sortiert Dateinamen,
dann sollte K. Matthews' answer für Sie arbeiten.
Andernfalls vorausgesetzt, Sie GNU Dienstprogramme haben:
find . -mindepth 1 -maxdepth 1 -type f -printf '%s\t%f\0' |
sort -zn -k1,1 |
while read -r -d '' size name; do echo "[$size] [$name]"; done
-mindepth 1 -maxdepth 1
Grenzen Dateien passen direkt gelegen in .
, ähnlich wie ls
(obwohl versteckten Dateien sind immer im Lieferumfang enthalten). Überlassen Sie es Prozessdateien in dem gesamten Teilbaum .
while
Die Schleife zeigt eine Möglichkeit der NUL-terminierten Ausgang von find
‚s -printf '...\0'
und sort -z
hergestellt weiterzuverarbeiten.
Mit awk -F'\t' -v RS='\0' ...
ist ein anderer.
Beachten Sie, dass find
's -printf
und sort
' s -z
Nicht-Standard sind, GNU-spezifische Erweiterungen, wie '\0'
als RS
Wert mit awk
verwendet wird.
- 1. Reihenfolge der Dateinamen von os.listdir
- 2. Identifizieren Sie doppelte Listen in der Liste der Listen?
- 3. Bash - Ändern Sie den Dateinamen durch Ändern der Dateinamenvariable
- 4. Tragen Sie die Reihenfolge der Liste an ein anderes Listen
- 5. Ermitteln der Dateigröße in VB.NET
- 6. Iterieren durch mehrere sortierte Listen in der Reihenfolge
- 7. Schnittpunkt zweier Listen in Bash
- 8. Reihenfolge der Liste der Listen im Vergleich mit einer anderen
- 9. Wie ordnen Sie die Reihenfolge in der Reihenfolge in Javascript?
- 10. Bash: Auflistung von Dateien in Datumsreihenfolge, mit Leerzeichen in Dateinamen
- 11. Wie manipulieren Sie mehr Dateien in Bash mit der gleichen Zeichenfolge in ihrem Dateinamen?
- 12. Reihenfolge der Threads in der Reihenfolge, in der sie erstellt/gestartet wurden
- 13. Generierung systematische inkrementelle nummerierte Dateinamen in Bash
- 14. Bash: sort Dateinamen mit Chromosomen
- 15. bash: Kürzen Dateinamen, sie einzigartig zu halten
- 16. Abrufen der Dateigröße im Automator-Workflow
- 17. Verwenden Sie "finden", um unbekannte Muster in Dateinamen mit Bash
- 18. Laden Sie mehrere Dateien in der Reihenfolge von JSON herunter
- 19. Markieren Sie bestimmte Wörter in der Reihenfolge
- 20. Speichern Sie benutzerdefinierte Attribute in der Reihenfolge
- 21. Ändern Sie die Dateinamen in einem bestimmten Ordner durch bash
- 22. Reihenfolge der Wachstumsrate in aufsteigender Reihenfolge
- 23. Überprüfen Sie die Dateigröße vor der Erstellung
- 24. Dateigröße in der SmarGWT-Komponente beschränken UploadItem
- 25. Abrufen der Dateigröße nach ID in jquery
- 26. list.files unter Berücksichtigung der Dateigröße in R?
- 27. Maximale Upload-Dateigröße in der php.ini
- 28. Wie drucke ich den Dateinamen in einem Ordner in Mac Terminal in der Reihenfolge der Reihenfolge, die im Grafikfenster angezeigt wird?
- 29. Leerzeichen im Dateinamen für ffmpeg in bash
- 30. Dateinamen ändern mit Bash
Dies wird nicht mit Dateien mit Platz zwischen ihnen umgehen, wie die Frage suggeriert. – Inian
@Inian warum nicht? 'ls' wird Dateien mit Leerzeichen behandeln, Wagenrücklauf einfach perfekt; Das * einzige * Problem, das ich sehe, ist, dass das OP beabsichtigt, die Ausgabe von diesem als Eingabe für ihr Skript zu verwenden - aber Ihre Antwort bietet auch keine Lösung dafür. –