Ben cevap vermeyeceğim biliyoruz xargs
doğrudan soru ama onun bahsetmemiz find
'ın -exec
seçeneği.
Aşağıdaki dosya sistemi göz önüne alındığında:
[root@localhost bokeh]# tree --charset assci bands
bands
|-- Dream\ Theater
|-- King's\ X
|-- Megadeth
`-- Rush
0 directories, 4 files
Find komutu Dream Theatre ve King's X'teki alanı idare etmek için yapılabilir. Yani, grep kullanarak her bandın davulcularını bulmak için:
[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
Gelen -exec
seçeneği {}
yolu da dahil olmak üzere dosya kısaltmasıdır. Kaçmak veya tırnak içine almak zorunda olmadığını unutmayın.
-exec
'Nin sonlandırıcıları ( +
ve \;
) arasındaki fark +
, bir komut satırına alabileceği kadar çok dosya adı gruplamasıdır. Oysa \;
her dosya adı için komutu yürütür.
Böylece, find bands/ -type f -exec grep Drums {} +
sonuç:
grep Drums "bands/Dream Theater" "bands/Rush" "bands/King's X" "bands/Megadeth"
ve find bands/ -type f -exec grep Drums {} \;
şunlarla sonuçlanır:
grep Drums "bands/Dream Theater"
grep Drums "bands/Rush"
grep Drums "bands/King's X"
grep Drums "bands/Megadeth"
Bu durumda grep
, dosya adını yazdırmanın ya da yazdırmamanın yan etkisi vardır.
[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
Tabii ki, grep
'seçenekleri -h
ve -H
nasıl grep
adlandırılır olursa olsun dosya adının yazdırılıp yazdırılmayacağını kontrol eder .
xargs
xargs
ayrıca man dosyalarının komut satırında nasıl olduğunu da kontrol edebilir.
xargs
varsayılan olarak tüm bağımsız değişkenleri tek bir satıra gruplar. Aynı şeyi yapmak için -exec \;
kullanıyor mu xargs -l
. -t
Seçeneğin xargs
komutu çalıştırmadan önce yazdırmayı söylediğini unutmayın .
[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
Seçeneğin xargs'a her dosya adı için grep yürütmesini söylediğini görün .
Varsayılana karşı (yani -l
seçenek yok ):
[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
komut satırında kaç dosya olabileceği konusunda daha iyi denetime sahiptir. Seçeneğe -l
komut başına maksimum dosya sayısı verin .
[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]#
Bunun grep
yüzünden iki dosya adıyla yürütüldüğüne bakın -l2
.
ls |grep mp3 |sed -n "7p"
sadece kullanabilirsinizecho "Lemon Tree.mp3"
.