2016-08-08 22 views
0

: Ich bin zu schälen, und ich möchte, aber lernen, scheint es ein wenig zu komplex zu verstehen:Was bedeutet {} in "xargs -I {} unrar x {}"?

find . \(-name *.rar \) | xargs -I {} unrar x {}

Können Sie bitte erklären Schritt für Schritt, was tut, ist. Ich weiß, dass es in Ordner geht und alle .rar Dateien findet, die es findet, und dann kettet es die Dateien, die es findet, in dem zweiten Teil des Befehls, der | Symbol verwendet. Allerdings verstehe ich nicht die xargs -I {} unrar x {} Teil und {} Befehl insbesondere. Ich weiß, dass unrar das Archiv extrahiert.

+1

Ich denke, 'Mann xargs' dir helfen könnten. – ArtOfWarfare

+2

Siehe Schritt-für-Schritt-Erklärung unter [exploreshell.com] (http://explainshell.com/explain?cmd=find+.+%5C%28+-name+*.rar+%5C%29+%7C+xargs+- I +% 7B% 7D + unrar + x +% 7B% 7D) –

+2

Es ist auch ziemlich unnötig schrecklich. Es gibt keinen Grund, dies zu schreiben, um "xargs" überhaupt zu verwenden, wenn 'find -exec' verwendet wird, und die Verwendung von xargs führt zu Fehlern (schauen Sie, was passiert, wenn Sie eine rar-Datei mit einem Leerzeichen im Namen haben. –

Antwort

3

Der {} ist ein Platzhalter, ersetzt durch einen Dateinamen im generierten Befehl.

Jedoch diesen Code nicht verwenden; Es verhält sich schlecht mit rar Archiven mit ungewöhnlichen Namen, oder, wenn Dateien im aktuellen Verzeichnis mit *.rar übereinstimmen (im Gegensatz zu Unterverzeichnissen). Betrachten Sie stattdessen:

find . -name '*.rar' -exec unrar x '{}' ';' 

... oder, wenn man wirklichxargs verwenden möchten:

find . -name '*.rar' -print0 | xargs -n 1 -0 unrar x