Ich weiß, dass ich die xargs
Frage nicht direkt beantworte , aber es lohnt sich, find
die -exec
Option 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 -exec
Option {}
steht für den Dateinamen einschließlich Pfad. Beachten Sie, dass Sie nicht entkommen oder in Anführungszeichen setzen müssen.
Der Unterschied zwischen -exec
den 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 grep
hat 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 -h
und -H
steuert , ob der Dateiname gedruckt wird , unabhängig davon , wie grep
genannt wird.
xargs
xargs
kann auch steuern, wie sich Man-Dateien in der Befehlszeile befinden.
xargs
Standardmäßig werden alle Argumente in einer Zeile zusammengefasst. Um das gleiche zu tun, was -exec \;
verwendet wird xargs -l
. Beachten Sie, dass die -t
Option 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
-l
Stellen Sie sicher, dass die Option xargs anweist, grep für jeden Dateinamen auszuführen.
Versus der Standardeinstellung (dh keine -l
Option):
[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
xargs
hat eine bessere Kontrolle darüber, wie viele Dateien sich in der Befehlszeile befinden können. Geben Sie der -l
Option 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 grep
mit zwei Dateinamen wegen ausgeführt wurde -l2
.
ls |grep mp3 |sed -n "7p"
können Sie einfach verwendenecho "Lemon Tree.mp3"
.