विकल्प झंडे को टार में पास करने के लिए सुपरफ़्लोस डैश (-) का उपयोग क्यों करें?


35

एक निर्देशिका के लिए टार फ़ाइल, बनाने के लिए tarसाथ आदेश compress, verboseऔर fileविकल्प इस प्रकार से टाइप किया जा सकता है:

$ tar -cvf my.tar my_directory/

लेकिन यह इसे इस तरह से करने के लिए भी काम करता है:

 $ tar cvf my.tar my_directory/

यही है, बिना डैश (-) विकल्पों से पहले। आप विकल्प सूची में डैश (-) को कभी क्यों पास करेंगे?


इन्हें भी देखें: unix.stackexchange.com/questions/28403/tar-cvf-or-tar-cvf
unor

जवाबों:


43

विकल्पों के लिए कई अलग-अलग पैटर्न हैं जिनका उपयोग ऐतिहासिक रूप से UNIX अनुप्रयोगों में किया गया है। कई पुराने, जैसे टार , एक स्थिति योजना का उपयोग करते हैं:

कमांड विकल्प तर्क

उदाहरण के लिए टार उपयोग करता है

* * हेरफेर करने के लिए फ़ाइलों के पथ " *" पर संचालित * कुछ * f "फ़ाइल

पुराने झंडे-तर्क शैली के साथ भ्रम, टार और कुछ अन्य कार्यक्रमों से बचने के पहले प्रयास में, झंडों के साथ झंडे को परिसीमित करने की अनुमति दी, लेकिन हममें से ज्यादातर पुराने लोगों ने बस इसे अनदेखा कर दिया।

कुछ अन्य आदेशों में एक अधिक जटिल कमांड लाइन सिंटैक्स होता है, जैसे dd (1) जो झंडे, समान संकेत, मार्ग, तर्क और नाशपाती के पेड़ में एक दलिया का उपयोग करता है, सभी जंगली परित्याग के साथ।

बीएसडी और यूनिक्स के बाद के संस्करणों में, यह कमोबेश'- 'के साथ चिह्नित एकल-वर्ण झंडे में परिवर्तित हो गया था, लेकिन यह कुछ समस्याओं को प्रस्तुत करने लगा:

  • झंडे को याद रखना मुश्किल हो सकता है
  • कभी-कभी आप वास्तव में '-' के साथ एक नाम का उपयोग करना चाहते थे
  • और विशेष रूप से जीएनयू उपकरणों के साथ, संभव झंडे की संख्या द्वारा लगाए गए सीमाएं होने लगीं। इसलिए GNU टूल्स ने GNU लॉन्ग ऑप्शन जोड़े --output

तब सन ने फैसला किया कि अतिरिक्त '-' बेमानी था और सिंगल 'के साथ लंबी शैली के झंडे का उपयोग करना शुरू कर दिया।

और इस तरह अब यह गड़बड़ हो गया है।


9
"और एक नाशपाती के पेड़ में एक दलिया" मेरे सूखे प्रयास से बेहतर है। तुम जीते।
dmckee

1
अच्छा ऐतिहासिक संदर्भ।

1
मैं ध्यान देता हूं कि बहुत सारे एक्स प्रोग्राम (सहित, कहते हैं, एक्स, एक्सगोर से), एकल के साथ लंबी शैली के झंडे का उपयोग करें -। क्या वह सूर्य से है?
mattdm

1
'नाशपाती के पेड़ में दलिया ’का क्या मतलब है? (क्या मेरा कोई उपयोगी और आसान लिंक हो सकता है?)
plhn

1
@plhn मुहावरा एक पारंपरिक अंग्रेजी क्रिसमस कैरोल "क्रिसमस के बारह दिन" असाधारण उपहारों के एक पूरे समूह को सूचीबद्ध करता है, जो "नाशपाती के पेड़ में एक दलिया" के साथ समाप्त होता है। यह एक लंबी असाधारण सूची का सुझाव देता है।
चार्ली मार्टिन

8

आप मानक यूनिक्स तरीके से टार विकल्प दे सकते हैं tar -c -f foo -v -B file1 file2 file3जहां आपको विकल्प और मापदंडों के बीच अंतर करने के लिए डैश की आवश्यकता होती है या कमांड लाइन के अंत में फ़ाइल नाम। या आप पहले तर्क में सभी विकल्पों को एक साथ रख सकते हैं, जिस स्थिति में डैश वैकल्पिक है।

इसके बाद ps, जहाँ आप डैश का उपयोग करते हैं यदि आप SysV-ish विकल्पों का उपयोग कर रहे हैं, और उन्हें छोड़ दें यदि आप BSD-ish विकल्पों का उपयोग कर रहे हैं, तो बस चीजों को और अधिक भ्रमित करने के लिए।

और बात भी नहीं करने देता find


2

डैश का उपयोग विकल्प पैरामीटर नाम और मानों के बीच अंतर करने के लिए किया जाता है। मुझे लगता है कि यह एक मानक सम्मेलन से अधिक है।


1
मैं best-practiceटैग जोड़ने जा रहा था क्योंकि मुझे लगा कि यह नीचे आ सकता है।

1
@Milktrader, सर्वोत्तम प्रथाओं के बारे में बात करते समय यह एक कठिन सवाल है। मानक सम्मेलनों का पालन करना वास्तव में सबसे अच्छा अभ्यास है, लेकिन क्या आप इसे अपने मामलों में करना चाहते हैं यह स्पष्ट नहीं है। यह आपके परिदृश्य पर निर्भर करेगा। यदि आप शेल में कुछ त्वरित कमांड को हैक कर रहे हैं, तो आप शायद इसके बारे में ज्यादा परवाह नहीं करेंगे, लेकिन अगर आप एक पुस्तकालय लिख रहे हैं, तो अच्छी तरह से स्थापित सम्मेलनों का पालन करना महत्वपूर्ण है क्योंकि आपके पास यह नियंत्रण नहीं है कि यह पुस्तकालय कैसे उपयोग किया जा रहा है ग्राहकों द्वारा। इस मामले में आपको सभी संभावित मामलों को कवर करना चाहिए और विकल्प नामों और मूल्यों के बीच अंतर करना महत्वपूर्ण है।

-1

यूनिक्स कमांड लाइन विकल्पों का उपयोग करने के लिए चार सम्मेलन होते हैं:

  1. -o -p -t (प्रत्येक विकल्प से पहले डैश)
  2. -टॉप (विकल्पों के एक सेट से पहले डैश)
  3. विकल्प (विकल्पों के सेट से पहले कोई डैश नहीं)
  4. - लंबा-विकल्प (विकल्प नाम से पहले डबल डैश)

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

$ tar -x -v -z -f package.tar.gz
$ tar -xvzf package.tar.gz
$ tar xvzf package.tar.gz
$ tar --extract -verbose -gzip -file package.tar.gz

1
क्या यह सम्मेलन केवल टार पर लागू है? Ls के बारे में क्या? ls lrt अभ्यस्त काम लेकिन ls -lrt / ls -l -r -t काम करेगा। ऐसा क्यों?
शशांक व्यास

चार सम्मेलनों को सभी आदेशों के लिए काम करना चाहिए।
जोंसजसेक

2
नहीं, वे नहीं। दूसरे दिन मैंने rm rf <filename> की कोशिश की, वह भी काम नहीं करता है।
शशांक व्यास

-2

अग्रणी माइनस / डैश साइन (-) के साथ आपको विकल्पों को सटीक क्रम में रखने की आवश्यकता है। बिना आपके विकल्प के माइनस ऑर्डर बदल सकता है।

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

# tar -xvf yourfile.tar
# tar vxf yourfile.tar

यह उत्तर आधा सही है, लेकिन AFAIK यह केवल ऐसे झंडे हैं fजो एक तर्क लेते हैं जिसका आदेश मायने रखता है। Unix.stackexchange.com/a/239120/3169
मिकेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.