लिनक्स में फ़ाइलनामों का नामकरण करते समय कुछ विशेष वर्णों का उपयोग करना सही है?


18

यह कुछ विशेष वर्ण, के रूप में उपयोग करने के लिए सही है +, &, ', .(डॉट) और ,(अल्पविराम), मूल रूप से, फ़ाइल नाम में।

मैं समझता हूं कि आप उपयोग कर सकते हैं -और _बिना किसी समस्या के, लेकिन कुछ शोध करने से मैं अन्य प्रतीकों के बारे में कुछ निश्चित नहीं पा सका हूं; कुछ कहते हैं कि आप कर सकते हैं, कुछ कहते हैं कि आप नहीं कर सकते हैं, और कुछ अन्य कहते हैं कि उन्हें (जो भी इसका मतलब है) उनका उपयोग करने के लिए "प्रोत्साहित नहीं" किया जाता है।


इन फ़ाइलों के साथ काम करने के लिए आप किन कार्यक्रमों का उपयोग कर रहे हैं। केवल ऐसे प्रोग्राम जो कुछ वर्णों की एक विशेष तरीके से व्याख्या करते हैं (जैसे कि बिना तार के गोले) समस्याएँ देंगे। आपका औसत C प्रोग्राम सब कुछ लेता है जो बिना पलक झपकाए NUL नहीं है।
एंथन

9
"सही" से आपका क्या तात्पर्य है?
डेविड रिचीर्बी

फ़ाइल नाम में विशेष वर्णों का उपयोग करने के साथ समस्या यह है कि ऐसा करने से यह संभावना बढ़ जाती है कि कोड के कुछ छोटे टुकड़े फ़ाइल नाम को गलत कर देंगे। हालाँकि, मुझे नहीं लगता कि आपके द्वारा सूचीबद्ध कोई भी वर्ण विशेष रूप से किसी भी समस्या का कारण हो सकता है। आपके पास व्हाट्सएप के साथ अधिक मुद्दे होंगे, जिन्हें आमतौर पर टाला जाना चाहिए । और ईओएल, विशेष रूप से, हर कीमत पर बचा जाना चाहिए।

विंडोज के पास फ़ाइल नाम में क्या हो सकता है, इस पर सख्त प्रतिबंध हैं, इसलिए यदि कोई मौका है कि फ़ाइलों को वहां उपयोग करने की आवश्यकता होगी, तो उस पर ध्यान देने के लिए कुछ है।
evilsoup

जवाबों:


28

क्या कुछ विशेष वर्णों का उपयोग करना सही है, जैसे +, &, ',। (डॉट) और, (अल्पविराम), मूल रूप से, फ़ाइल नाम में।

हाँ।

सही लेकिन जरूरी नहीं कि वह उचित या सुविधाजनक हो।

आप आधुनिक यूनिक्स और लिनक्स फाइल सिस्टम में फ़ाइल नाम के अलावा किसी भी वर्ण का/ उपयोग कर सकते हैं ।

आप ASCII विराम चिह्न का उपयोग कर सकते हैं । कुछ उपयोगिताओं उनके द्वारा बनाई गई फ़ाइलों के नाम में स्टॉप ( डॉट ) और कॉमा का उपयोग करती हैं।

आप ASCII नियंत्रण वर्णों का उपयोग कर सकते हैं , हालांकि यह असावधान है क्योंकि वे स्वीकार्य रूप से प्रदर्शित होने की संभावना नहीं हैं और उपयोग करने में मुश्किल हैं।

आप ASCII एम्परसेंड और ASCII एपोस्ट्रोफी जैसे शेल मेटा-वर्णों का उपयोग कर सकते हैं । हालाँकि, यह असुविधाजनक है और इसके लिए आवश्यक है कि कमांड बनाते समय आप ऐसे पात्रों के उद्धरण या उनसे बचने के लिए विशेष ध्यान रखें।

आप कई प्रकार के एन्कोडिंग का उपयोग करके मल्टी-बाइट पात्रों का उपयोग कर सकते हैं । गैर-ASCII वर्णों की सही व्याख्या और प्रदर्शन करने के लिए यह शेल और / या उपयोगिताओं तक है। यह सलाह दी जाती है कि अपने आप को एक लोकप्रिय एन्कोडिंग जैसे कि UTF-8 तक सीमित रखें और स्थानीय रूप से उचित रूप से सेट करें।

आपको ASCII प्रिंट करने योग्य वर्णों का उपयोग करने में कम से कम समस्याएं होंगी , उन लोगों को विराम चिह्न वर्णों के सेट को सीमित करना जो शेल मेटा-वर्ण नहीं हैं और एक हाइफ़न (या स्टॉप - जब तक आप फ़ाइल को छिपाना नहीं चाहते हैं) के साथ नाम शुरू नहीं करते हैं।


23

जैसा कि दूसरों ने कहा है, आधुनिक यूनिक्स / लिनक्स सिस्टम पर, फ़ाइल नामों में \0(एनयूएल) और /(स्लैश) को छोड़कर कोई भी चरित्र हो सकता है ।

उस के अलावा, POSIX मानक फ़ाइल नाम के लिए सेट एक पोर्टेबल चरित्र को परिभाषित करता है:

3.278 पोर्टेबल फ़ाइल नाम चरित्र सेट

वर्णों का समूह जिसमें से पोर्टेबल फ़ाइल नाम का निर्माण किया जाता है।

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -

अंतिम तीन वर्ण क्रमशः <अवधि>, <अंडरस्कोर>, और <हाइफ़न> वर्ण हैं। Pathname भी देखें ।

विकल्प के साथ बुलाए pathchkजाने पर GNU Coreutils की उपयोगिता इसकी जांच करती -pहै, और -Pविकल्प खाली फ़ाइल नामों के बारे में चेतावनी देगा (जो मान्य नहीं हैं लेकिन एक तर्क के रूप में पारित किया जा सकता है pathchk) और एक हाइफ़न ( -) के साथ शुरू होने वाले नामों को दर्ज करें ।


9

सबसे सुरक्षित शर्त किसी भी ऑपरेटिंग सिस्टम के लिए अनुमत वर्ण सेट के लिए विकिपीडिया प्रविष्टि का उल्लेख करना है। यह यहाँ से पाया जा सकता है

उदाहरण के लिए, अधिकांश यूनिक्स आधारित प्रणालियों के लिए, अनुमत वर्ण सेट 8 बिट सेट है और आरक्षित वर्ण अशक्त वर्ण (NUL '\0') है। हालाँकि, फ़ाइल नाम में विशेष वर्णों का उपयोग करना एक अच्छा अभ्यास नहीं है क्योंकि उन्हें हटाते समय कोई समस्या आती है।

उदाहरण के लिए, मेरे पास एक फ़ाइल नाम हो सकता है -ramesh.txtऔर मैं इसे नीचे के रूप में निकालने का प्रयास करता हूं।

rm -ramesh.txt
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.
rm "-ramesh.txt"
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.

मुझे फ़ाइल को हटाने की आवश्यकता है,

rm -- "-ramesh.txt"
rm: remove regular empty file `-ramesh.txt'? y

इस उत्तर से और भी विवरण मिल सकते हैं ।

लिनक्स और ओएस-एक्स में केवल /मुद्रण योग्य एएससीआईआई सेट निषिद्ध है जो मुझे विश्वास है। कुछ वर्ण (शेल मेटाचैकर जैसे *?!) कमांड लाइनों में समस्याएं पैदा करेंगे और फ़ाइल नाम को उचित रूप से उद्धृत या बच निकलने की आवश्यकता होगी।

एक्स्ट्रीम 2, एक्सएक्स 3 जैसे लिनक्स फाइलसिस्टम वर्ण-सेट अज्ञेयवादी हैं (मुझे लगता है कि वे इसे कमोबेश एक बाइट स्ट्रीम के रूप में मानते हैं - केवल नल और /निषिद्ध हैं)। इसका मतलब है कि आप UTF-8 एन्कोडिंग में फ़ाइलनाम स्टोर कर सकते हैं। मेरा मानना ​​है कि यह प्रदर्शन या प्रसंस्करण के लिए फ़ाइल नाम को ठीक से उपयोग करने के लिए एन्कोडिंग का उपयोग करने के लिए शेल या अन्य एप्लिकेशन पर निर्भर है।

इसलिए निष्कर्ष निकालने के लिए, समस्या फ़ाइल नाम के लिए विशेष वर्णों का उपयोग करने में नहीं है, लेकिन उन्हें कैसे संभालना है।


उस कारण के लिए ("उन्हें कैसे संभालना है"), मैं लगभग विशेष रूप से केवल अक्षरों, संख्याओं, अंडरस्कोर, और अवधियों का उपयोग करता हूं, यदि केवल अपने जीवन को आसान बनाने के लिए जब मैं बाद में तय करता हूं कि मुझे अपनी फाइलों पर सामान करने के लिए कमांड लाइन कार्यक्रमों का उपयोग करने की आवश्यकता है। (जो हमेशा कम से कम एक बार ऊपर आने लगता है)।
फेयरफॉक्स

19
फ़ाइल नाम के साथ शुरू करने की वकालत करने के लिए नहीं, -बल्कि सटीक होने के लिए: 1) आपको निश्चित रूप से इस फ़ाइलनाम के आसपास के उद्धरणों की आवश्यकता नहीं है, 2) विशेष --तर्क का उपयोग करने के बजाय आप वही कर सकते हैं जो rmखुद सुझाते हैं: rm ./-ramesh.txtइसलिए आपको इसे करने की आवश्यकता नहीं है जैसा आप सुझाव दें।
माइकल पोलित्स्की

@ MichałPolitowski न केवल आप उद्धरण की जरूरत नहीं है, वे बिल्कुल शून्य प्रभाव है।
ctrl-alt-delor-

4

आपका शोध लगभग सही है। फ़ाइल नामों में विशेष वर्णों का उपयोग करना संभव है, लेकिन यह उचित नहीं है क्योंकि इन वर्णों का विशेष अर्थ है। लिनक्स में फ़ाइल नामकरण कन्वेंशन फ़ाइल नामों पर अन्य प्रतिबंधों का वर्णन करता है और साथ ही "फ़ाइल नाम कभी भी हाइफ़न के साथ शुरू नहीं होना चाहिए।"

फ़ाइल नामों में विशेष वर्णों के साथ कमांड लाइन संचालन करने का सरल उदाहरण

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


1
तो अपने सलाह केवल उपयोग करने के लिए किया जाएगा -, _और .फ़ाइल नाम में (डॉट)?
क्रिस क्लेन

@ क्रिसलीन, हां, हालांकि फ़ाइल नाम की शुरुआत में नहीं।
बस_मे

विशेष अर्थ कार्यक्रम में है (उदाहरण के लिए आपका खोल), फ़ाइल नाम नहीं । लगभग यू एंड एल पर सभी कार्यक्रमों पात्रों के बारे में परवाह नहीं है सब पर जब तक वहाँ फ़ाइल नाम में एक NUL नहीं है।
एंथन

@Aththon, हाँ, मेरा शेल लिंक में वर्णित है।
बस_मे

2
एक व्यक्तिगत नोट के रूप में, मैं डेवलपर्स को अपने प्रोजेक्ट के मूल फ़ोल्डर का नामकरण करने की सलाह दूंगा, जैसे "föλder \ t -" - ताकि वे तुरंत नोटिस कर सकें कि क्या वे ऐसे फ़ाइल नाम पर बग बनाते हैं, जो टूटे हुए कोड या बायनेरी को प्रकाशित करने के बजाय। कि दूसरों के आसपास काम करना है। इसका उपयोग करना कोई समस्या नहीं है, जब तक कि यह एकमात्र ऐसा है जो 'f' से शुरू होता है, किसी भी शेल में टैब-पूरा होने पर हार्ड-टू-टाइप सामान दर्ज होगा।
पीटरिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.