2009-08-21 13 views
41

अगर मैं एक स्ट्रिंग जो एक फ़ाइल नाम का प्रतिनिधित्व करने के लिए नहीं की गारंटी है बनाना चाहता था, मैं विंडोज पर उस में निम्नलिखित पात्रों में से एक डाल सकता है:क्या कोई अवैध लिनक्स फ़ाइल नाम है?

\/: * ? | < > 

उदा

this-is-a-filename.png 

?this-is-not.png 

क्या स्ट्रिंग को लिनक्स पर संभवतः 'फ़ाइल नहीं' के रूप में पहचानने का कोई तरीका है?

+0

बहुत निश्चित रूप से ''/''कम से कम अस्वीकृत है (या अगर यह नहीं था तो एक पूर्ण पिटा होगा) –

+1

char * str =" foo/bar "; – nos

उत्तर

35

लगभग कोई प्रतिबंध नहीं हैं - '/' और '\0' के अलावा, आपको कुछ भी उपयोग करने की अनुमति है। हालांकि, some people लगता है कि यह बहुत लचीलापन की अनुमति देना अच्छा विचार नहीं है।

+5

+ हालांकि फ़ाइल का बहुत अच्छा प्रतिनिधित्व कर सकता है, यह फ़ाइल सिस्टम पर निर्भर हो सकता है। –

+0

लचीलापन आपको परेशानी में डाल देता है क्योंकि बहुत से अनुप्रयोग फ़ाइल नामों को टेक्स्ट स्ट्रिंग के रूप में देखते हैं - और आपको चरित्र एन्कोडिंग समस्याओं के सभी प्रकार मिलते हैं। और यह सिर्फ इसके साथ स्पष्ट समस्या है :) – nos

+2

मुझे वास्तव में लगता है कि कम से कम कुछ फाइल सिस्टम 'NUL' का समर्थन कर सकता है। –

7

लिनक्स पर एक खाली स्ट्रिंग एकमात्र सही अमान्य पथ नाम है, जो आपको केवल एक अमान्य नाम की आवश्यकता हो सकती है। आप "///foo" जैसी स्ट्रिंग का भी उपयोग कर सकते हैं, जो कैननिकल पथ नाम नहीं होगा, हालांकि यह फ़ाइल ("/foo") का संदर्भ दे सकता है। एक और संभावना "/dev/null/foo" जैसी कुछ होगी, क्योंकि /dev/null में पॉज़िक्स-परिभाषित गैर-निर्देशिका अर्थ है। यदि आपको केवल तारों की आवश्यकता है जो नियमित फ़ाइल का संदर्भ नहीं दे सकते हैं तो आप "/" या "." का उपयोग कर सकते हैं, क्योंकि वे हमेशा निर्देशिकाएं हैं।

-2

मुझे व्यक्तिगत रूप से पता चलता है कि समस्या कई बार लिनक्स नहीं है लेकिन एप्लिकेशन लिनक्स पर उपयोग कर रहा है।

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

शेल टर्मिनल में फ़ाइल नाम भी अजनबी दिखते हैं:/संगीत/एल्बम/Einst $ '\ 374'rzende \ Neubauten कितना अजीब बात है।

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

कुल मिलाकर यह एक मुश्किल क्षेत्र है और यदि आप विंडोज और लिनक्स के बीच एक संगीत संग्रह को सिंक्रनाइज़ करने का प्रयास कर रहे हैं तो यह बहुत कांटेदार लगता है जिसमें कुछ फ़ोल्डर या फ़ाइल नामों में फंकी वर्ण होते हैं।

सबसे सुरक्षित बात यह है कि ASCII-only फ़ाइल नामों के साथ चिपक जाती है।

+1

यह मुझे डरने वाले प्रश्न का समाधान नहीं करता है। – Mat

+0

मैं असहमत हूं।तकनीकी रूप से एनटीएफएस फाइल सिस्टम सभी प्रकार की शानदार सुविधाओं का समर्थन करता है जो प्राथमिक "एप्लिकेशन" जो इसका उपयोग करता है (विंडोज) वैध या उपयोग पर विचार नहीं करता है। – OOPMan

+0

ऐसा लगता है जैसे आपके विंडोज बॉक्स ने आपके लिनक्स लोकेल की तुलना में एक अलग एन्कोडिंग का उपयोग किया था। जब तक आपके फ़ाइल नाम आपके लोकेल के समान एन्कोडिंग का उपयोग करके एन्कोड किए जाते हैं, तो आपको विस्तृत वर्णों का उपयोग करके ठीक होना चाहिए, हालांकि आप सही हैं कि एएससीआई का उपयोग करना सुरक्षित है। –

संबंधित मुद्दे