
Ich muss die Ausgabe alphabetisch sortieren können, find
bevor ich sie an einen Befehl weiterleite. Die Eingabe von „ | sort |
between“ hat nicht funktioniert. Was kann ich also tun?
find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
Antwort1
Verwenden Sie es find
wie üblich und trennen Sie Ihre Zeilen mit NUL. GNU sort
kann dies mit dem Schalter -z handhaben:
find . -print0 | sort -z | xargs -r0 yourcommand
Antwort2
Einige Versionen sort
verfügen über eine -z
Option, die nullterminierte Datensätze zulässt.
find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand
Darüber hinaus können Sie hierfür auch ein High-Level-Skript schreiben:
find folder1 folder2 -name "*.txt" -print0 | python -c 'import sys; sys.stdout.write("\0".join(sorted(sys.stdin.read().split("\0"))))' | xargs -r0 myCommand
Fügen Sie die -r
Option hinzu, xargs
um sicherzustellen, dass es myCommand
mit einem Argument aufgerufen wird.
Antwort3
Ich denke, Sie benötigen die -n
Flagge zum Sortieren
Nach Männertyp:
-n, --numeric-sort
compare according to string numerical value
bearbeiten
Das print0 könnte damit etwas zu tun haben, ich habe es gerade getestet. Nehmen Sie das print0 heraus, Sie können den String in sort mit dem -z
Flag null beenden
Antwort4
Einige Implementierungen find
unterstützen die geordnete Durchquerung direkt über den -s
Parameter:
$ find -s . -name '*.json'
Aus dem FreeBSD-Suchfeldmanpage:
-s Cause find to traverse the file hierarchies in lexicographical
order, i.e., alphabetical order within each directory. Note:
`find -s' and `find | sort' may give different results.