लोग कहते हैं कि आपको यूनिक्स फ़ाइल नामकरण में रिक्त स्थान का उपयोग नहीं करना चाहिए। क्या फ़ाइल नामों (अर्थात, File_Name.txt
बनाम file_name.txt
) में बड़े अक्षरों का उपयोग नहीं करने के अच्छे कारण हैं ? या यह सिर्फ व्यक्तिगत पसंद का मामला है?
लोग कहते हैं कि आपको यूनिक्स फ़ाइल नामकरण में रिक्त स्थान का उपयोग नहीं करना चाहिए। क्या फ़ाइल नामों (अर्थात, File_Name.txt
बनाम file_name.txt
) में बड़े अक्षरों का उपयोग नहीं करने के अच्छे कारण हैं ? या यह सिर्फ व्यक्तिगत पसंद का मामला है?
जवाबों:
लोग कहते हैं कि आपको यूनिक्स फ़ाइल नामकरण में स्थान नहीं चाहिए।
लोग बहुत सी बातें कहते हैं। कुछ उपकरण हैं जो खराब हो सकते हैं, लेकिन उम्मीद है कि वे इस समय इस संख्या में कम हैं, क्योंकि रिक्त स्थान विशाल उपभोक्ता स्वामित्व वाले ओएस कॉर्पोरेशन्स द्वारा फैलाया गया वायरस है और अब बचना असंभव है।
रिक्त स्थान कमांड लाइन पर फ़ाइल नाम निर्दिष्ट करते हैं, आदि, अजीब। यह इसके बारे में। * Nix सिस्टम पर केवल स्पष्ट रूप से निषिद्ध वर्ण NUL हैं (चिंता न करें, यह आपके कीबोर्ड, या किसी और के पर नहीं है) और /
, क्योंकि यह पथ विभाजक है। 1 इसके अलावा कुछ भी हो जाता है। व्यक्तिगत पथ तत्व (फ़ाइल नाम) 255 बाइट्स तक सीमित हैं (एक संभावित जटिलता यदि आप विस्तारित चरित्र सेट का उपयोग कर रहे हैं) और 4 kB को पूर्ण पथ।
या यह सिर्फ व्यक्तिगत पसंद का मामला है
मैं कहूंगा कि यह है। अधिकांश डे के दशक में अपने पूंजीकृत निर्देशिका के एक धसान बनाने के लिए लग रहे हैं $HOME
( Downloads
, Desktop
, Documents
- D
, बहुत लोकप्रिय है) तो इसके बारे में कुछ भी नहीं विचित्र नहीं है। उनमें राजधानियों के साथ बहुत आम पारंपरिक फाइलें भी हैं, जैसे .Xclients
और .Xauthority
।
शुरुआत में चीजों को कैपिटलाइज़ करने का एक मूल्य यह है कि जब लेक्सोग्राफिक रूप से सूचीबद्ध किया जाता है, तो वे लोअर केस चीजों से पहले आएंगे - कम से कम, कई टूल्स के साथ, और लोकेल के अधीन।
मैं ऊँट के मामले का एक प्रशंसक हूँ (उर्फ। कैमलकेस) और इसका उपयोग फ़ाइल नाम के साथ करता हूँ, उदाहरण के लिए, /home/goldilocks/blueSuedeShoes
- कोई बात नहीं कि वहाँ क्या है। निश्चित रूप से व्यक्तिगत पसंद की बात है लेकिन इसने मुझे दु: ख पहुंचाना अभी बाकी है।
जावा वर्ग की फाइलें प्रकृति द्वारा राजधानियों को समाहित करती हैं, क्योंकि जावा वर्ग के नाम हैं। और हां, हम भूल नहीं सकते NetworkManager
, भले ही हम में से कुछ पसंद करेंगे।
1. एक बहुत अधिक सीमांकित है, जो POSIX द्वारा सुझाया गया है "पोर्टेबल फ़ाइलनाम चरित्र सेट" जिसमें स्थान शामिल नहीं है - लेकिन इसमें ऊपरी मामला शामिल है! POSIX एक ही दस्तावेज़ में कहीं और "स्लैश चरित्र और अशक्त बाइट" के बारे में अधिक सामान्य प्रतिबंध को निर्दिष्ट करता है । यह लंबे समय से चली आ रही पारंपरिक प्रथाओं को दर्शाता है, या परिलक्षित होता है ।
README
और Makefile
एस और इतने पर।
फाइलनाम में कैप से बचने का एक कारण यह है कि यूनिक्स में सॉर्टिंग ऑर्डर संवेदनशील है, इसलिए कैपिटल लेटर से शुरू होने वाली फाइलें ऑर्डर से बाहर हो जाएंगी। यही कारण है कि Makefile
आम तौर पर एक पूंजी का उपयोग करके नाम दिया जाता है M
- यह उन फ़ाइलों में से एक है जिसे आप पहले देखना चाहते हैं, बिना गर्त नीचे स्क्रॉलिंग / स्किपिंग के a-l
।
इसने कहा, आप फ़ाइल नामों के मामले में बहुत बुरा कर सकते हैं:
-
समस्याएँ हो सकती हैं क्योंकि कई प्रोग्राम इसे फ़ाइल नाम के बजाय कमांड-लाइन विकल्प के रूप में देखेंगे (जैसे नाम वाली फ़ाइल rm -r
को नहीं हटाएगा -r
)।.
वसीयत के साथ एक फ़ाइल नाम शुरू करना कई उपयोगिताओं और शेल ग्लोबिंग से छिपाएगा (जैसे rm *
फाइलें नहीं निकालेगा .config
)|<>*?
और यहां तक कि गैर-मुद्रण योग्य वर्णों का उपयोग newline
करना तकनीकी रूप से संभव है, लेकिन अंतरिक्ष वर्ण के समान स्क्रिप्ट / कार्यक्रमों को तोड़ सकता है। अंतर यह है कि अंतरिक्ष चरित्र का उपयोग अक्सर किया जाता है, इसलिए प्रोग्रामर इसके खिलाफ अपने कार्यक्रमों का परीक्षण करते हैं, जबकि कम लोकप्रिय चरित्र अक्सर अप्रयुक्त रहते हैं।rm *
फाइलों को नहीं हटाया जाएगा .config
?
Makefile
और README
इसके आदर्श उदाहरण हैं। यह भी ध्यान दें कि यदि नाम में पहला अक्षर नहीं है, तो यह प्रभाव नगण्य है, इसलिए यदि आप कैमकोर्डर का उपयोग करते हैं तो यह कोई बड़ी बात नहीं है। निश्चित रूप से, आपको anOctagon
पहले देखकर आश्चर्य हो सकता है angle
, लेकिन कम से कम वे लिस्टिंग में एक साथ होंगे।
यदि आप Windows वातावरण के साथ इंटरफ़ेस करने जा रहे हैं, तो आपको राजधानियों से बचना चाहिए क्योंकि Windows सब कुछ कम कर देगा। यह अक्सर दूसरी तरह से जाने वाली समस्या है; विंडोज में Page_2.html
खोजने के लिए एक लिंक page_2.html
, लेकिन यूनिक्स में विफल हो जाएगा।
NUL
और /
निषिद्ध के साथ।
cat > Foo
फ़ाइल को अधिलेखित कर देगा foo
। यदि आप केस-संरक्षण और केस-संवेदी फाइलसिस्टम जैसे ext * का उपयोग करते हैं तो यह व्यवहार अप्रत्याशित और भ्रमित होने की संभावना है ।
\0
और /
, केस-संवेदी)। कम से कम यह है कि मुझे यह कैसे याद है। लेकिन मैं मानता हूं कि यह एक गड़बड़ है। आगे भी प्रतिबंध हैं ...
कैप्स से बचने का एक कारण यह है कि bash
टैबकंप्लीशन केस-सेंसिटिव है (कम से कम डिफ़ॉल्ट रूप से) - यह तब भी मुझे हर बार ट्रिप करता है जब मैं bash
डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ समाप्त होता हूं । ज़रूर, अन्य लोकप्रिय गोले हैं, लेकिन इस तथ्य के साथ संयुक्त है कि bash
कई ओएस पर डिफ़ॉल्ट लॉगिन शेल है इसका मतलब है कि डिफ़ॉल्ट बार-बार केस-संवेदी पूर्णता है। ऑल-लोअरकेस फाइलनाम का उपयोग करना यहां चीजों को सरल बनाता है।
echo set completion-ignore-case On >> ~/.inputrc
थोड़ी मदद कर सकते हैं, कम से कम अपने सिस्टम पर।
Foo
और बाद में टाइप cat f
(टैब) फ़ाइल बनाते हैं, तो यह विफल हो जाएगा। लेकिन अगर आप टाइप करते हैं तो वही बात होती है cat foo
, cat Foobar
या cat Fu
- यह तथ्य कि आपको एक ऐसी फाइल तक पहुंचने में परेशानी होगी, जिसका नाम आपको ठीक से याद नहीं है, इसका वास्तव में स्वत: पूर्णता से कोई लेना-देना नहीं है।
चूंकि NL_Derek ने कीड़े के इस डिब्बे को खोला, लेकिन इसे ठीक से व्यक्त नहीं किया, इसलिए मैं यह कहूंगा:
बड़े अक्षरों का उपयोग करना ठीक है, लेकिन आपको फ़ाइलें (उसी निर्देशिका में) बनाने से बचना चाहिए जो केवल मामले से भिन्न हों , उदाहरण के लिए, File_Name.txt
और file_name.txt
,
FILENA~1.TXT
और FILENA~2.TXT
- dir /x
यह देखने के लिए कि संक्षिप्त नाम (यदि कोई हो) किस लंबे नाम के साथ जाता है।)cmd1 > foo
cmd2 > Foo
cmd2
तकनीकी कारणों के अलावा, मेरे पास इसका एक व्यावहारिक पहलू है। अक्षरों को नीचे करने से यह सुनिश्चित होगा कि खोज तब तक आसान है जब तक कि कोई grep -i या find -i का उपयोग करने का शौकीन न हो। कभी-कभी, कैमकलेस भी भ्रामक हो सकता है यदि किसी को स्टोरेज वाईएनसीडीसीरीरी की तरह केस-केस शब्दों का उपयोग करना है। इसलिए, मुझे स्टोरेज_एनसी_डेक_प्रिमरी की तरह पठनीयता के लिए अंडरस्कोर या हाइफ़न से चिपके रहना और उन्हें पेस्ट करना सबसे अच्छा लगता है।
storageNycDcPrimary
और StorageNycDcPrimary
दोनों पढ़ने के लिए अजीब हैं।
मैं मानता हूं कि फ़ाइल नाम में राजधानियों और स्थानों का उपयोग करने से बचना सबसे अच्छा अभ्यास है ।
कुछ कहेंगे कि वे सहमत नहीं हैं, लेकिन यह एक मामला है या जिसे मैं धार्मिक विश्वास कहता हूं : चर्चा करना और सहमत होना मुश्किल है। सहमत नहीं होने वालों का कहना है कि अधिकांश उपकरण अब राजधानियों और स्थानों के अनुकूल होने के लिए तय किए गए हैं: वे सही हैं लेकिन यह सवाल नहीं है।
सही सवाल यह है कि आपको फ़ाइल नाम में राजधानियों और रिक्त स्थान का उपयोग करने की कितनी आवश्यकता है । इस सवाल के लिए, जब मैं जावा में प्रोग्रामिंग कर रहा हूं, तब भी, इसका जवाब ज्यादातर समय होता है: मुझे अपने फिल्मांकन में राजधानियों और स्थानों की आवश्यकता नहीं है । सभी रिक्त स्थान जो मैं एक अंडरस्कोर ( _
) या माइनस साइन ( -
) के द्वारा प्रतिस्थापित करता हूं , और उस वजह से मैं ऊंट के मामले (उर्फ। कैमकेलेज़) का उपयोग किसी अन्य धर्म के विपरीत नहीं करता हूं।
कई लोगों ने ऐसा करने और सिखाने के लिए मुझ पर बकवास कहा - उनमें से कुछ अभी भी करते हैं - उनमें से कुछ एक उपकरण पर फंस गए जो पूंजी / अंतरिक्ष के अनुकूल नहीं थे और यह कहते हुए मेरे पास आए कि मैं सही था और उन्हें मेरी बात सुननी चाहिए थी। जो आप चाहते हैं वह करें , और यदि आप फ़ाइल नाम में राजधानियों और रिक्त स्थान का उपयोग करते हैं , तो मुझे आशा है कि आप कभी भी एक बुरी तरह से लिखे गए उपकरण पर यात्रा नहीं करेंगे। हालांकि, यदि आप ऐसे उपकरण पर यात्रा करते हैं, तो उम्मीद है कि फिर से, इसे ठीक करना मुश्किल नहीं होगा और आपके व्यवसाय और / या आपको बहुत पैसा और / या समय खर्च नहीं होगा। लेकिन अगर यह खराब नतीजों को समाप्त करता है, तो आपको याद होगा कि कुछ ने आपको अतीत में बताया था कि फ़ाइल नाम में राजधानियों और स्थानों का उपयोग करना बुरा व्यवहार है।
और एक आखिरी बात, यदि आप सभी समस्याओं से बचना चाहते हैं , तो फ़ाइल नाम में कोई विशेष वर्ण नहीं है (केवल निचले मामले के अक्षर, अंक, अंडरस्कोर और मिनस [1])। इस अनचाही चरित्र सूची में सभी गैर अस्सी के अक्षर भी शामिल हैं (हाँ, फ्रेंच और अन्य गैर अंग्रेजी लोग - और मैं उनमें से एक हूं - इनमें से कोई नहीं: à, â, ä, ç, é, ..., ö, includes, includes) , ...)। यह लॉगिन और पासवर्ड सहित कई अन्य चीजों तक भी फैला हुआ है । मैं आपको अनुमान लगाता हूं कि जब आप एक बोली या दोहरी बोली ( '
या "
) एक लॉगिन या पासवर्ड में डालते हैं तो क्या होता है जो किसी पुष्ट स्क्रिप्ट द्वारा लिखित नहीं है।
[1]: शायद हम विस्तार कर सकता है कि करने के लिए ~
, @
, #
और कुछ अन्य, लेकिन इस मुसीबत की तलाश में है (और हाँ मैं Emacs फ़ाइलों के बारे में पता है ...)।