Was ist die Verwendung von -exec xargs und -print0?

20

Ich denke, dies sind die gebräuchlichen Methoden, um das Ergebnis eines Befehls als Eingaben an den nächsten zu übergeben.

Wie arbeiten diese drei? Oder was sind einige Websites / URLs?

James Bond
quelle

Antworten:

25

Erste Dinge zu tippen:

man find

man xargs

Der findBefehl gibt die Ergebnisse standardmäßig in der Standardausgabe aus, sodass die -printOption normalerweise nicht erforderlich ist. -print0Die Dateinamen werden jedoch durch ein 0-Byte (NULL) getrennt, damit Namen, die Leerzeichen oder Zeilenumbrüche enthalten, korrekt interpretiert werden können.

Die -execOption ist etwas , das man anstelle von xargs verwenden können - der Befehl find führt einen Befehl für jedes Element es findet.

Der xargsBefehl liest durch Leerzeichen oder Zeilenumbrüche getrennte Zeichenfolgen (normalerweise aus dem Befehl " find" , sie können jedoch von überall stammen) und führt für jede Zeichenfolge einen Befehl aus.
Wenn xargs mit der Option -0 ausgeführt wird , werden durch NULL getrennte Zeichenfolgen als Ausgabe von erwartetfind ... -print0

Der Vorteil von xargs besteht darin, dass es die Zeichenfolgen gruppieren kann, sodass ein Befehl nur ein- oder zweimal anstelle von n- mal ausgeführt wird.

Also im normalen Gebrauch:

find start_directory -name '*.txt' | xargs ls -l 

find listet die Dateinamen auf und xargs gibt Befehle aus wie:

ls -l file1.txt file2.txt file3.txt ... fileN.txt

Dies ist schneller, als wenn Sie den Befehl find ausgeben:

ls -l file1.txt
ls -l file2.txt
ls -l file3.txt
ls -l ...
ls -l fileN.txt
njd
quelle
7

Beachten Sie, dass xargs bei aktuellen Suchimplementierungen, die wahrscheinlich alle diese POSIX-Syntax unterstützen, nicht mehr benötigt wird:

find directory -name '*.txt' -exec ls -l {} + 

Das ist einfacher und etwas schneller als die xargs-Variante.

find directory -name '*.txt' | xargs ls -l 
jlliagre
quelle
xargs verwendet weit weniger Ressourcen als "find -exec"
Felipe Alvarez
7
Das ist umgekehrt. Piping zu xargs verbraucht etwas mehr Ressourcen als -exec. Sie übersehen wahrscheinlich das "+" - Abschlusszeichen.
Juli