Ich weiß, dass ich die xargsFrage nicht direkt beantworte , aber es lohnt sich, finddie -execOption zu erwähnen .
Gegeben das folgende Dateisystem:
[root@localhost bokeh]# tree --charset assci bands
bands
|-- Dream\ Theater
|-- King's\ X
|-- Megadeth
`-- Rush
0 directories, 4 files
Der Befehl find kann verwendet werden, um den Platz in Dream Theatre und King's X zu verwalten. So finden Sie die Schlagzeuger jeder Band mit grep:
[root@localhost]# find bands/ -type f -exec grep Drums {} +
bands/Dream Theater:Drums:Mike Mangini
bands/Rush:Drums: Neil Peart
bands/King's X:Drums:Jerry Gaskill
bands/Megadeth:Drums:Dirk Verbeuren
In der -execOption {}steht für den Dateinamen einschließlich Pfad. Beachten Sie, dass Sie nicht entkommen oder in Anführungszeichen setzen müssen.
Der Unterschied zwischen -execden Terminatoren ( +und \;) besteht darin, dass +so viele Dateinamen wie möglich in einer Befehlszeile zusammengefasst werden. Während \;der Befehl für jeden Dateinamen ausführen.
Also find bands/ -type f -exec grep Drums {} +ergibt sich:
grep Drums "bands/Dream Theater" "bands/Rush" "bands/King's X" "bands/Megadeth"
und find bands/ -type f -exec grep Drums {} \;führt zu:
grep Drums "bands/Dream Theater"
grep Drums "bands/Rush"
grep Drums "bands/King's X"
grep Drums "bands/Megadeth"
In diesem Fall grephat dies den Nebeneffekt, dass entweder der Dateiname gedruckt wird oder nicht.
[root@localhost bokeh]# find bands/ -type f -exec grep Drums {} \;
Drums:Mike Mangini
Drums: Neil Peart
Drums:Jerry Gaskill
Drums:Dirk Verbeuren
[root@localhost bokeh]# find bands/ -type f -exec grep Drums {} +
bands/Dream Theater:Drums:Mike Mangini
bands/Rush:Drums: Neil Peart
bands/King's X:Drums:Jerry Gaskill
bands/Megadeth:Drums:Dirk Verbeuren
Natürlich grep‚s Optionen -hund -Hsteuert , ob der Dateiname gedruckt wird , unabhängig davon , wie grepgenannt wird.
xargs
xargs kann auch steuern, wie sich Man-Dateien in der Befehlszeile befinden.
xargsStandardmäßig werden alle Argumente in einer Zeile zusammengefasst. Um das gleiche zu tun, was -exec \;verwendet wird xargs -l. Beachten Sie, dass die -tOption anweist xargs, den Befehl zu drucken, bevor er ausgeführt wird.
[root@localhost bokeh]# find ./bands -type f | xargs -d '\n' -l -t grep Drums
grep Drums ./bands/Dream Theater
Drums:Mike Mangini
grep Drums ./bands/Rush
Drums: Neil Peart
grep Drums ./bands/King's X
Drums:Jerry Gaskill
grep Drums ./bands/Megadeth
Drums:Dirk Verbeuren
-lStellen Sie sicher, dass die Option xargs anweist, grep für jeden Dateinamen auszuführen.
Versus der Standardeinstellung (dh keine -lOption):
[root@localhost bokeh]# find ./bands -type f | xargs -d '\n' -t grep Drums
grep Drums ./bands/Dream Theater ./bands/Rush ./bands/King's X ./bands/Megadeth
./bands/Dream Theater:Drums:Mike Mangini
./bands/Rush:Drums: Neil Peart
./bands/King's X:Drums:Jerry Gaskill
./bands/Megadeth:Drums:Dirk Verbeuren
xargshat eine bessere Kontrolle darüber, wie viele Dateien sich in der Befehlszeile befinden können. Geben Sie der -lOption die maximale Anzahl von Dateien pro Befehl.
[root@localhost bokeh]# find ./bands -type f | xargs -d '\n' -l2 -t grep Drums
grep Drums ./bands/Dream Theater ./bands/Rush
./bands/Dream Theater:Drums:Mike Mangini
./bands/Rush:Drums: Neil Peart
grep Drums ./bands/King's X ./bands/Megadeth
./bands/King's X:Drums:Jerry Gaskill
./bands/Megadeth:Drums:Dirk Verbeuren
[root@localhost bokeh]#
Siehe, dass grepmit zwei Dateinamen wegen ausgeführt wurde -l2.
ls |grep mp3 |sed -n "7p"können Sie einfach verwendenecho "Lemon Tree.mp3".