Aku tahu bahwa aku tidak menjawab xargspertanyaan secara langsung , tapi itu layak disebut find's -execpilihan.
Diberikan sistem file berikut:
[root@localhost bokeh]# tree --charset assci bands
bands
|-- Dream\ Theater
|-- King's\ X
|-- Megadeth
`-- Rush
0 directories, 4 files
Perintah find dapat dibuat untuk menangani ruang di Dream Theater dan King's X. Jadi, untuk menemukan drummer dari setiap band menggunakan 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
Dalam -execopsi {}singkatan nama file termasuk jalur. Perhatikan bahwa Anda tidak perlu menghindarinya atau menuliskannya dalam tanda kutip.
Perbedaan antara -execterminator ( +dan \;) adalah +mengelompokkan sebanyak mungkin nama file ke satu baris perintah. Sedangkan \;akan menjalankan perintah untuk setiap nama file.
Jadi, find bands/ -type f -exec grep Drums {} +akan menghasilkan:
grep Drums "bands/Dream Theater" "bands/Rush" "bands/King's X" "bands/Megadeth"
dan find bands/ -type f -exec grep Drums {} \;akan menghasilkan:
grep Drums "bands/Dream Theater"
grep Drums "bands/Rush"
grep Drums "bands/King's X"
grep Drums "bands/Megadeth"
Dalam hal grepini memiliki efek samping baik mencetak nama file atau tidak.
[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
Tentu saja, grepopsi -hdan -Hakan mengontrol apakah nama file dicetak terlepas dari bagaimana grepdipanggil.
xargs
xargs juga dapat mengontrol bagaimana file manusia berada di baris perintah.
xargssecara default mengelompokkan semua argumen ke dalam satu baris. Untuk melakukan hal yang sama yang -exec \;digunakan xargs -l. Perhatikan bahwa -topsi memberi tahu xargsuntuk mencetak perintah sebelum menjalankannya.
[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
Lihat bahwa -lopsi memberi tahu xargs untuk menjalankan grep untuk setiap nama file.
Lawan default (yaitu tidak ada -lopsi):
[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
xargsmemiliki kontrol yang lebih baik pada berapa banyak file yang dapat berada di baris perintah. Berikan -lopsi jumlah maksimal file per perintah.
[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]#
Lihat yang grepdieksekusi dengan dua nama file karena -l2.
ls |grep mp3 |sed -n "7p"Anda hanya bisa menggunakanecho "Lemon Tree.mp3".