मुझे पता है कि मैं जवाब दे नहीं कर रहा हूँ xargs
सवाल सीधे लेकिन यह की कीमत का उल्लेख find
के -exec
विकल्प।
निम्नलिखित फाइल सिस्टम को देखते हुए:
[root@localhost bokeh]# tree --charset assci bands
bands
|-- Dream\ Theater
|-- King's\ X
|-- Megadeth
`-- Rush
0 directories, 4 files
ड्रीम थियेटर और किंग्स एक्स में स्थान को संभालने के लिए खोज कमांड बनाया जा सकता है। इसलिए, ट्रे का उपयोग करके प्रत्येक बैंड के ड्रमर्स को खोजने के लिए:
[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
में -exec
विकल्प {}
पथ सहित फ़ाइल नाम के लिए खड़ा है। ध्यान दें कि आपको इससे बचना नहीं है या इसे उद्धरण में नहीं रखना है।
-exec
'S टर्मिनेटर ( +
और \;
) के बीच का अंतर यह है कि +
समूह कई फ़ाइल नामों के रूप में है जो यह एक कमांड लाइन पर कर सकते हैं। जबकि \;
प्रत्येक फ़ाइल के नाम के लिए कमांड निष्पादित करेगा।
तो, find bands/ -type f -exec grep Drums {} +
परिणाम होगा:
grep Drums "bands/Dream Theater" "bands/Rush" "bands/King's X" "bands/Megadeth"
और find bands/ -type f -exec grep Drums {} \;
परिणाम होगा:
grep Drums "bands/Dream Theater"
grep Drums "bands/Rush"
grep Drums "bands/King's X"
grep Drums "bands/Megadeth"
इस के मामले में grep
फ़ाइल नाम को मुद्रित करने या न करने का दुष्प्रभाव है।
[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
बेशक, grep
के विकल्प -h
और -H
यह नियंत्रित करेंगे कि नाम कैसे grep
कहा जाता है, चाहे उसका नाम छपा हो या नहीं ।
xargs
xargs
यह भी नियंत्रित कर सकते हैं कि कैसे आदमी फाइलें कमांड लाइन पर हैं।
xargs
डिफ़ॉल्ट समूहों द्वारा एक पंक्ति में सभी तर्क। आदेश का उपयोग करने के लिए वही काम -exec \;
करने के लिए xargs -l
। ध्यान दें कि -t
विकल्प xargs
इसे निष्पादित करने से पहले कमांड प्रिंट करना बताता है।
[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
विकल्प xargs को हर फ़ाइलनाम के लिए grep निष्पादित करने के लिए कहता है।
डिफ़ॉल्ट (अर्थात कोई -l
विकल्प नहीं ):
[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
कमांड लाइन पर कितनी फाइलें हो सकती हैं, इस पर बेहतर नियंत्रण है। -l
विकल्प को प्रति कमांड फाइलों की अधिकतम संख्या दें ।
[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]#
देखें कि grep
किस वजह से दो फ़ाइलनामों के साथ निष्पादित किया गया था -l2
।
ls |grep mp3 |sed -n "7p"
आप के बजाय बस का उपयोग कर सकते हैंecho "Lemon Tree.mp3"
।