-Exec xargs और -print0 का क्या उपयोग है?


20

मुझे लगता है कि इनपुट के रूप में अगले एक पर एक कमांड के परिणाम को पारित करने के ये सामान्य तरीके हैं।

ये तीनों कैसे काम करते हैं? या कुछ वेबसाइट / URL क्या हैं?

जवाबों:


25

टाइप करने के लिए पहली चीजें:

man find

man xargs

findडिफ़ॉल्ट रूप से मानक आउटपुट में आदेश प्रिंट परिणाम है, इसलिए -printविकल्प सामान्य रूप से की जरूरत नहीं है, लेकिन -print0एक 0 (शून्य) बाइट के साथ फ़ाइल नामों को अलग करती है ताकि नाम रिक्त स्थान या नई-पंक्तियों से युक्त सही ढंग से व्याख्या की जा सकती।

-execविकल्प कुछ आप xargs के बजाय का उपयोग कर सकते है - ढूंढें आदेश यह पाता प्रत्येक आइटम के लिए एक कमांड निष्पादित करता है।

xargsआदेश पढ़ता अंतरिक्ष या न्यू लाइन द्वारा अलग किए गए तार (आमतौर से खोज आदेश है, लेकिन वे कहीं से भी आ सकता है) और प्रत्येक स्ट्रिंग के लिए कुछ आदेश निष्पादित करता है।
यदि xargs को -0 विकल्प के साथ चलाया जाता है , तो यह आउटपुट द्वारा NULL-पृथक स्ट्रिंग्स की अपेक्षा करेगाfind ... -print0

Xargs का लाभ यह है कि यह स्ट्रिंग्स को एक साथ समूहित कर सकता है, ताकि यह केवल n के बजाय एक या दो बार कमांड को निष्पादित करे ।

तो सामान्य उपयोग में:

find start_directory -name '*.txt' | xargs ls -l 

लगता है फ़ाइल नामों की सूची है, और xargs की तरह आदेश जारी होगा:

ls -l file1.txt file2.txt file3.txt ... fileN.txt

जो आपके आदेश जारी करने से अधिक तेज़ है:

ls -l file1.txt
ls -l file2.txt
ls -l file3.txt
ls -l ...
ls -l fileN.txt

7

ध्यान दें कि xargs को वर्तमान खोज कार्यान्वयनों की अधिक आवश्यकता नहीं है जो संभवतः इस POSIX सिंटैक्स का समर्थन करते हैं:

find directory -name '*.txt' -exec ls -l {} + 

जो सरल है और xargs संस्करण की तुलना में थोड़ा तेज है।

find directory -name '*.txt' | xargs ls -l 

xargs 'find -exec' की तुलना में बहुत कम संसाधनों का उपयोग करता है
Felipe Alvarez

7
वह दूसरा रास्ता है। Xargs पर पाइपिंग -exec की तुलना में थोड़ा अधिक संसाधनों का उपयोग करेगा। आप शायद "+" टर्मिनेटर की अनदेखी करते हैं।
jlliagre

2

उनमें से कम से कम एक लिंक मृत है। यह बेहतर है कि प्रासंगिक कोड नमूना भी पोस्ट किया जाए।
user5359531

@ user5359531: मृत लिंक को बदल दिया गया था। और मैं ऐसे स्वैच्छिक ट्यूटोरियल को पुन: पेश नहीं कर सकता।
harrymc
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.