it-swarm.com.de

Die Ausgabe von "find" sortieren?

Ich muss in der Lage sein, die Ausgabe von find alphabetisch zu sortieren, bevor ich sie an einen Befehl weiterleiten kann. Eingabe von | sort | zwischen hat nicht funktioniert, also was könnte ich tun?

find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
90
Industrial

Verwenden Sie wie gewohnt find und begrenzen Sie Ihre Zeilen mit NUL. GNU sort kann diese mit dem Schalter -z verarbeiten:

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

Einige Versionen von sort haben ein -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 dazu auch ein übergeordnetes 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

Ergänzen Sie die -r Option zu xargs, um sicherzustellen, dass myCommand mit einem Argument aufgerufen wird.

62
Arcege

Ich denke, Sie benötigen das Flag -n Für die Sortierung #

Nach menschlicher Art:

-n, --numeric-sort
    compare according to string numerical value

bearbeiten

Der print0 hat vielleicht etwas damit zu tun, ich habe das gerade getestet. Nehmen Sie den Ausdruck print0 heraus. Sie können die Zeichenfolge mit dem Flag -z In der Sortierung auf Null setzen

5
whoami

Wenn Sie GNU Parallel http://www.gnu.org/software/parallel/ installiert haben, können Sie dies tun:

find folder1 folder2 -name "*.txt" -print | 
  sort |
  parallel myCommand

Sie können GNU Parallel einfach installieren durch:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

Sehen Sie sich die Intro-Videos für GNU Parallel an, um mehr zu erfahren: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

2
Ole Tange