'+' (प्लस) और ';' का उपयोग करने में क्या अंतर है? (अर्धविराम) -exec कमांड में?


28

मुझे यह जानकर आश्चर्य हो रहा है कि जब मैं कमांड का उपयोग करता हूं तो कमांड के उपयोग +और ;अंत में क्या अंतर है ?-execfind

find .... -exec ... \; 

वी.एस.

find .... -exec ... + 

जवाबों:


36

-exec ... \;एक के बाद एक आइटम चलाएंगे। इसलिए यदि आपके पास तीन फाइलें हैं, तो निष्पादन रेखा तीन बार चलेगी।

-exec ... {} +आदेशों एक समय में एक से अधिक फ़ाइल ले जा सकते हैं के लिए है (उदाहरण के लिए cat, stat, ls)। द्वारा मिली फाइलों को findएक xargsकमांड की तरह एक साथ जंजीर से बांध दिया जाता है। इसका मतलब है कम बाहर निकलना और छोटे ऑपरेशन के लिए, पर्याप्त गति का मतलब हो सकता है।

यहां 10,000 खाली फ़ाइलों को पूरा करने वाला प्रदर्शन डेमो है।

$ mkdir testdir
$ touch testdir/{0000..9999}

$ time find testdir/ -type f -exec cat {} \;
real    0m8.622s
user    0m0.452s
sys     0m8.288s

$ time find testdir/ -type f -exec cat {} +
real    0m0.052s
user    0m0.015s
sys     0m0.037s

फिर से यह केवल उन कमांड पर काम करता है जो कई फाइलनाम ले सकते हैं। यदि आपका कमांड ऐसा है तो आप उसके मैनपेज को देख कर पता लगा सकते हैं। यहाँ से सारांश है man cat:

SYNOPSIS
       cat [OPTION]... [FILE]...

एलिप्सिस का [FILE]...अर्थ है कि यह एक से अधिक फ़ाइल ले सकता है।

+केवल एकल आदेशों पर उपयोग किया जा सकता है और आपके पास {}पंक्ति में बिल्कुल एक होना चाहिए । \;कई शून्य से कई समूहों के साथ काम कर सकते हैं।


4
उदाहरण:, \;निष्पादित कमांड होगी cat 1; cat 2; cat 3। के साथ +, निष्पादित कमांड होगी cat 1 2 3
आला अली

AFAIK, +POSIX नहीं है, इसलिए यह गैर-लिनक्स सिस्टम पर उपलब्ध नहीं हो सकता है। चिंता की बात नहीं है अगर आप कभी भी प्लेटफॉर्म नहीं छोड़ते हैं, लेकिन यह जानना अच्छा है कि क्या आपको कभी सोलारिस का उपयोग करना है। :)
साइमन रिक्टर

ओह अच्छा, इस जानकारी के लिए धन्यवाद। मैं आम तौर -exec <command> {} ';'पर अपनी टाइपिंग में आसान होने के कारण (मैं टाइप को छू सकता हूं लेकिन मेरे पास सबसे अच्छी तकनीक नहीं है)।
hanetzer

2
@SimonRichter: नहीं, -exec ... {} +POSIX है। देखें: pubs.opengroup.org/onlinepubs/9699919799/utilities/…
cuonglm

@SimonRichter को 2001 में POSIX चश्मा में शामिल करने और 2004 में POSIX अंक 6 में अनुसमर्थन के लिए सुझाव दिया-exec ... {} + गया था । यह संभव है कि आपके द्वारा उपयोग किया जाने वाला Solaris का संस्करण उस POSIX मानक से पुराना हो (या पहले के संस्करण को लक्षित करता है)।
ओली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.