एक कमांड लाइन तर्क की तरह एक फ़ाइल कैसे बनाई जाती है?


29

मैं सोच रहा था कि झंडे के रूप में एक फाइल कैसे बनाऊं, उदाहरण के लिए, अगर मैं नाम का फोल्डर बनाना चाहता हूं, तो -aकमांड क्या करेगा?

मैंने कोशिश की mkdir '-a', mkdir \-aऔर न ही काम किया। मैं उबंटू पर हूं।


13
यहाँ जवाब सभी बहुत अच्छे हैं, लेकिन मैं ऐसा करने के लिए एक गैर-ट्रोल कारण के बारे में नहीं सोच सकता ...
evilsoup

@evilsoup कुछ लोग उपसर्ग फ़ोल्डर पसंद करते हैं, ताकि वे अल्फ़ान्यूमेरिक रूप से सॉर्ट की गई सूची में शीर्ष पर रहें। लेकिन यही एकमात्र कारण है जिसके बारे में मैं सोच सकता हूं, ईमानदार होना।
slhck

@slhck मुझे कम से कम एक वीडियो संपादन पाठ्यक्रम के बारे में पता है, जहां वे छात्रों को अपनी परियोजनाओं की निर्देशिकाओं के लिए रिक्त स्थानों को जोड़ने के लिए प्रोत्साहित करते हैं ताकि वे सांप्रदायिक iMacs में शीर्ष पर दिखाएंगे। यह बदसूरत था और प्रफुल्लित करने के लिए नेतृत्व किया, लेकिन कम से कम यह संभावित रूप से सिस्टम-ब्रेकिंग नहीं होगा ...
evilsoup

3
अधिकतर यह अकादमिक हित के लिए यहां है।
MYV

जवाबों:


49

कमांड को कॉल करें जैसे:

mkdir -- -a

इसका --मतलब है कि विकल्प उसके बाद समाप्त हो जाते हैं, इसलिए -aशाब्दिक रूप से व्याख्या की जाती है और विकल्प के रूप में नहीं mkdir। आपको यह सिंटैक्स न केवल अंदर मिलेगा mkdir, बल्कि इसके अलावा echoऔर किसी भी POSIX- अनुरूप उपयोगिता testविनिर्देशन से :

तर्क - विकल्पों के अंत का संकेत देने वाले परिसीमन के रूप में स्वीकार किया जाना चाहिए। किसी भी निम्नलिखित तर्क को ऑपरेंड के रूप में माना जाना चाहिए, भले ही वे '-' चरित्र से शुरू हों। - तर्क का उपयोग विकल्प के रूप में या ऑपरेंड के रूप में नहीं किया जाना चाहिए।

--सुरक्षा के रूप में उपयोग करने की अनुशंसा लगभग किसी भी कार्रवाई के लिए की जाती है जहाँ आप फ़ाइल नाम के साथ व्यवहार करते हैं और यह सुनिश्चित करना चाहते हैं कि वे कमांड को न तोड़ें, उदाहरण के लिए जब एक लूप में फ़ाइलों को स्थानांतरित करना चाहते हैं, तो आप निम्नलिखित को कॉल कर सकते हैं, ताकि -iisn नामक फ़ाइल ' विकल्प के रूप में सही ढंग से पार्स किया गया t ((?):

mv -- "$f" new-"$f"

इस दृष्टिकोण के नकारात्मक पक्ष यह है कि यह विकल्प प्रसंस्करण को समाप्त करता है। एक साधारण mkdir उदाहरण के लिए, जो अद्भुत काम करता है; यदि आपको वास्तव में कमांड लाइन पर फ़ाइल नाम का पालन करने के लिए एक विकल्प की आवश्यकता है, तो यह बिल्कुल भी काम नहीं करेगा।
एक CVn

1
बेशक - वहाँ सब कुछ करने के लिए एक नकारात्मक पहलू है। ऐसे मामलों में जहां आप विकल्पों के साथ इंटरप्रैप्ड फ़ाइल नामों से निपटते हैं, आमोस का समाधान एकमात्र ऐसा वैकल्पिक विकल्प होगा जिसके बारे में मैं सोच सकता हूं, लेकिन यह वास्तव में इस बात पर निर्भर करता है कि टूल कैसे विकल्प चुनता है।
slhck

1
चूंकि ओपी "कमांड लाइन तर्क की तरह" नाम के साथ एक फ़ाइल बनाने की बात करता है (मान लीजिए कि एक हाइफ़न के साथ शुरू होने वाले नाम का अर्थ है), मुझे नहीं लगता कि यह पूरी तरह से अनुचित धारणा है। cc -o -myfile -Wall -myfile.cकेवल थोड़े थोड़े वंचित उदाहरण के रूप में लें । इसके नमक के लायक कोई भी संपादक एक फ़ाइल को सहेजने में सक्षम होना चाहिए जिसका नाम -myfile.cअगर आप उससे पूछते हैं, लेकिन सी कंपाइलर शायद ऐसा नहीं करेगा जब आपको इस तरह के विकल्पों की सूची दी जाए।
एक CVn

1
@ माक्सिम उदाहरण उन कमांड्स के लिए जिन्हें इनपुट या आउटपुट फ़ाइलनाम सेट करने के लिए एक विकल्प की आवश्यकता होती है, जैसे कि ccकमांड माइकल ने ऊपर दिया था, जिसमें -oआउटपुट फाइल को निर्दिष्ट करने का विकल्प होता है।
slhck

1
लूप का उदाहरण है कि क्यों आपको हमेशा कुछ करना चाहिए जैसे for f in ./*; do...किfor f in *; do...
evilsoup

21

किसी भी उचित कार्यक्रम के साथ काम करने का सबसे सरल तरीका यह है कि -उदाहरण के लिए एक रिश्तेदार पथ नाम का उपयोग किया जाए , जैसे कि वर्तमान कार्यशील निर्देशिका में mkdir ./-aएक निर्देशिका बनाई जाएगी -a

इस "ट्रिक" का उपयोग करने का सबसे आम उदाहरण है जब आप एक फ़ाइल को निकालना चाहते हैं जो डैश के साथ शुरू होती है, तो आप कर सकते हैं rm ./-a


3
यदि आप फ़ाइल पथों के साथ काम कर रहे हैं, तो यह केवल चाल ही करता है, न कि किसी भी मनमाना कमांड लाइन विकल्प जो स्ट्रिंग के रूप में पार्स किए जाते हैं। लेकिन अन्यथा उपसर्ग ./हमेशा एक अच्छा विचार है - कल्पना करें कि आपने एक फ़ाइल बनाई है जिसे -rfआपने कॉल किया है और फिर आपने कॉल किया rm *
slhck

1
कई लोगों को जो मजाक लग सकता है। लेकिन मैंने इस तरह के मामलों को देखा है जहाँ इस तरह की चीज़ एक सर्वर को मिटा देती है। आप डैश से शुरू होने वाली फ़ाइलों के खतरों के बारे में लोगों को पर्याप्त चेतावनी नहीं दे सकते। एक जगह जहां मैंने काम किया था वह भी एक आधिकारिक नियम के रूप में था: कभी भी ऐसी फ़ाइल न बनाएं जिसका नाम "-f" या "-r" से शुरू हो।
टननी

1
यह एक का जवाब होना चाहिए: यह एकमात्र पोर्टेबल तरीका है ( --हर आज्ञाओं से समझ में नहीं आता है, बस कुछ)
ओलिवियर दुलक

@OlivierDulac मुझे लगा कि --यह कोई तोड़-फोड़ वाली बात है, इसलिए इसे सभी कार्यक्रमों के लिए काम करना चाहिए?
gsingh2011

@ gsingh2011 नहीं, जो कोड तय करता है कि क्या "-" को "झंडे का अंत" माना जाता है, मार्कर आवेदन में रहता है और यह तय करना प्रत्येक आवेदन पर निर्भर है कि वह इसे इस तरह से मानता है या नहीं।
आमोस शापिरा

4

ऐसा करने का कारण mkdir '-a'या mkdir \-aकाम नहीं करता है, क्योंकि इन दोनों तरीकों (उद्धरण या बैकस्लैश का उपयोग करके) का उपयोग आपके शेल (संभावना bash) को किसी विशेष अर्थ को देने से रोकने के लिए किया जाता है। चूंकि -aशेल के लिए कुछ भी विशेष मतलब नहीं है, इन पर इसका कोई प्रभाव नहीं है कि यह कैसे पारित हो जाता है mkdir

जहां तक mkdirबात है, यह शेल से तर्कों की एक सूची प्राप्त करता है, और यह नहीं बता सकता है कि आपने उन्हें उद्धरण में रखा है या नहीं, या बैकस्लैश था या नहीं। यह सिर्फ एक तर्क देखता है -a। इसलिए आपको --अन्य उत्तरों में बताए अनुसार की आवश्यकता है।


-3

"स्लॉक" के उत्तर के अलावा एक और चाल है जो कभी-कभी काम करती है:

(भिन्न) qoutes जैसे "'-a'"या के 2 सेट के भीतर प्रश्न में फ़ाइल नाम रखें '"-a"'

यह कार्य कार्यक्रम पर निर्भर करता है या नहीं, लेकिन यह एक अंतिम उपाय है यदि प्रोग्राम POSIX --सुविधा का समर्थन नहीं करता है ।
POSIX विधि हमेशा पसंद की जाती है क्योंकि यह 100% विश्वसनीय है।


"POSIX विधि हमेशा पसंद की जाती है क्योंकि यह 100% विश्वसनीय है।" --ऑप्शन को समाप्त करने के लिए प्रोसेसिंग का उपयोग करके यह भी मान लिया जाता है कि आपको फ़ाइल नाम का पालन करने के लिए किसी विकल्प की आवश्यकता नहीं है, जो कि हमेशा ऐसा नहीं होता है।
एक CVn

@ माइकलकॉर्जलिंग बेशक ... लेकिन मुझे लगता है कि यह स्पष्ट होगा।
टॉनी

4
यह एक फ़ाइल कहा जाता है पैदा करेगा '-a'या "-a"कम से कम बीएसडी-प्रकार सिस्टम पर,
nohillside

4
क्या आप ओएस / शेल का हवाला दे सकते हैं जहां यह काम करता है ?
nohillside

1
यदि यह काम करता है, तो ऐसा लगता है कि आपको एक महत्वपूर्ण समस्या होगी जो कि quotmarks से घिरे नामों के साथ फ़ाइलों से निपटने में समस्या होगी।
मुहुमथेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.