Sortieren der Ausgabe von „find -print0“ durch Weiterleitung an den Befehl „sort“

Sortieren der Ausgabe von „find -print0“ durch Weiterleitung an den Befehl „sort“

Ich muss die Ausgabe alphabetisch sortieren können, findbevor 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 findwie üblich und trennen Sie Ihre Zeilen mit NUL. GNU sortkann dies mit dem Schalter -z handhaben:

find . -print0 | sort -z | xargs -r0 yourcommand

Antwort2

Einige Versionen sortverfügen über eine -zOption, 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 -rOption hinzu, xargsum sicherzustellen, dass es myCommandmit einem Argument aufgerufen wird.

Antwort3

Ich denke, Sie benötigen die -nFlagge 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 -zFlag null beenden

Antwort4

Einige Implementierungen findunterstützen die geordnete Durchquerung direkt über den -sParameter:

$ 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.

verwandte Informationen