लिनक्स कमांड: फाइलें ढूंढें और उन पर कमांड चलाएं


16

मैं एक निर्देशिका और उपनिर्देशिका में सभी फ़ाइलों को खोजने और उन पर एक कमांड चलाने का प्रबंधन कैसे करूं?

उदाहरण के लिए,

find . -type f -name "*.txt" 

सभी txt फ़ाइलें और पाता है:

find . -type f -name "*.txt" | gedit

इसे gedit को भेजता है, लेकिन एक पाठ फ़ाइल के अंदर। मैं सभी पाठ फ़ाइलों को खोलने के लिए gedit चाहता हूं।

जवाबों:


22

आप -execप्रत्येक मिलान फ़ाइल पर कमांड निष्पादित करने के लिए ध्वज का उपयोग कर सकते हैं :

$ find ./ -type f -name "*.txt" -exec gedit "{}" \;

वाक्य - विन्यास

वाक्य-विन्यास थोड़ा अजीब है ( -exec command ;अधिक के लिए मैनपे में देखें ):

The string `{}' is replaced by the current file name being processed

आप यह भी विचार कर सकते हैं -execdir, जो ऐसा ही करेगा, लेकिन उपनिर्देशिका से मिलान की गई फ़ाइल से कमांड निष्पादित करता है (यह आमतौर पर बेहतर होता है)।


1
धन्यवाद। मैं देखता हूं कि यह काम करता है। लेकिन अंत क्या होता है ("{}" \ _)? सूची निष्पादित करें?

1
{}वर्तमान फ़ाइल नाम के लिए में खड़ा है, और अर्धविराम सिर्फ आदेश को समाप्त कर रहा है। बैकस्लैश और आसपास के उद्धरण केवल शेल विस्तार को रोकने के लिए हैं।
डेविड कैन

5

find . -type f -name "*.txt" -print0 | xargs -0 gedit


धन्यवाद। मैं देखता हूं कि यह काम करता है। लेकिन क्या करता है -प्रिंट0 | xargs -0 भाग का मतलब है?

1
@xyz, आप मैन पेज का उपयोग करके किसी भी UNIX कमांड के झंडे के बारे में पढ़ सकते हैं । कोशिश करो man findया man xargsफिर /किसी दिए गए झंडे की खोज करो । प्रलेखन काफी अच्छा है, इसे आपके सवालों का जवाब देना चाहिए।
डेविड कैन

1
-print0प्रत्येक प्रविष्टि के बाद एक NULL वर्ण प्रिंट करता है, -0प्रविष्टियों को NULL वर्ण द्वारा अलग किए जाने की अपेक्षा करता है। यह मुश्किल नामों को संभालने का सबसे सुरक्षित तरीका है।
नोटिनिस्टल

और क्या यह थोड़ा अजीब नहीं है कि सिंटैक्स xedgs -0 के बजाय gedit -0 नहीं है। मैं देखता हूं कि पूर्व काम नहीं करता है, लेकिन यह देखने में विफल है कि क्यों।

3
xargs प्रदर्शन करने के कारणों से बेहतर है क्योंकि xargs उन्हें gedit पास करने से पहले कई तर्क "बैच अप" कर सकता है। अगर किसी को व्यक्तिगत रूप से प्रत्येक फ़ाइल के खिलाफ gedit चलाने की आवश्यकता है, तो '... -print0 | xargs -0 gedit 'के साथ' ... -print0 | xargs -0 -i gedit {} 'xargs उन कमांडों में से एक है, जो खोज और स्क्रीन की तरह है, जिसे आप कभी नहीं जानते कि आपको इसके बारे में जानने के बाद एक साल के बिना कैसे मिला।
आर्कलाइट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.