Aku tahu bahwa aku tidak menjawab xargs
pertanyaan secara langsung , tapi itu layak disebut find
's -exec
pilihan.
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 -exec
opsi {}
singkatan nama file termasuk jalur. Perhatikan bahwa Anda tidak perlu menghindarinya atau menuliskannya dalam tanda kutip.
Perbedaan antara -exec
terminator ( +
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 grep
ini 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, grep
opsi -h
dan -H
akan mengontrol apakah nama file dicetak terlepas dari bagaimana grep
dipanggil.
xargs
xargs
juga dapat mengontrol bagaimana file manusia berada di baris perintah.
xargs
secara default mengelompokkan semua argumen ke dalam satu baris. Untuk melakukan hal yang sama yang -exec \;
digunakan xargs -l
. Perhatikan bahwa -t
opsi memberi tahu xargs
untuk 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 -l
opsi memberi tahu xargs untuk menjalankan grep untuk setiap nama file.
Lawan default (yaitu tidak ada -l
opsi):
[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
memiliki kontrol yang lebih baik pada berapa banyak file yang dapat berada di baris perintah. Berikan -l
opsi 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 grep
dieksekusi dengan dua nama file karena -l2
.
ls |grep mp3 |sed -n "7p"
Anda hanya bisa menggunakanecho "Lemon Tree.mp3"
.