ब्रेंट के साथ और बगैर लाइनक्स में अलग-अलग बेंटीवार्स क्या है


19

मैं जानना चाहता हूं कि इसमें क्या अंतर है

ls | xargs rm

ls | xargs -i{} rm {}

दोनों मेरे लिए काम कर रहे हैं

जवाबों:


19

xargs rmrmरिक्त स्थान के साथ पैरामीटर के रूप में सभी तर्कों के साथ आह्वान करेगा ।

xargs -i{} rm {}rm {}प्रत्येक तर्क के लिए आह्वान करेगा और {}वर्तमान तर्क द्वारा प्रतिस्थापित किया जाएगा।

यदि आपके पास 2 तर्क हैं a.txtऔर b.txt, xargs rm इसे कॉल करेंगे

rm a.txt b.txt

लेकिन xargs -i{} rm {}बुला लेंगे

rm a.txt
rm b.txt

ऐसा इसलिए है क्योंकि -iविकल्प का अर्थ है -L 1विकल्प, जिसका अर्थ है कि कमांड प्रत्येक बार rmकेवल 1लाइन लेगा । और यहाँ प्रत्येक पंक्ति में केवल 1 तर्क है।

इसके बारे में अधिक विचार प्राप्त करने के लिए इस Ideone लिंक की जाँच करें ।


जो एक बेहतर है

1
@ user19140477031 एक निर्भर करता है कि आप कौन सा ऑपरेशन कर रहे हैं। इसके लिए rmकोई फर्क नहीं पड़ता
Shiplu Mokaddim

3

ब्रेसिज़ के साथ यह rmप्रति फ़ाइल एक प्रक्रिया को स्पॉन करेगा । ब्रेसिज़ के बिना, xargsप्रत्येक rmआदेश के लिए जितने संभव हो उतने फ़ाइलनाम पास करेंगे ।

तुलना

ls | xargs echo

तथा

ls | xargs -i echo '{}'

2

-i विकल्प (--replace के बराबर) एक प्रकार का प्लेसहोल्डर बनाता है जहां xargs इनपुट को स्टोर करता है जो उसे प्राप्त होता है। आपके दूसरे कमांड में, प्लेसहोल्डर "{}" है, यह फाइंड -सेक्स विकल्प की तरह काम करता है। एक बार परिभाषित होने के बाद, xargs इस प्लेसहोल्डर को इनपुट की पूरी लाइन से बदल देगा। यदि आप "{}" नाम की तरह नहीं हैं, तो आप अपने खुद को परिभाषित कर सकते हैं:

ls | xargs -iPLACEHOLDER इको प्लेसहोल्डर गूंज

आपके मामले में, दोनों कमांड एक ही परिणाम उत्पन्न कर रहे हैं। दूसरे रूप में, आप केवल -i विकल्प के साथ डिफ़ॉल्ट व्यवहार स्पष्ट कर रहे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.