लिनक्स, विंडोज और ओएस-एक्स के लिए क्रॉस-प्लेटफॉर्म फ़ाइल नामों में कौन से अक्षर सुरक्षित हैं


60

वर्तमान में, मैं YYMMDD-NAME+PAGEअपनी अधिकांश फ़ाइलों के लिए एक नाम का उपयोग करता हूं। NAMEरिक्त स्थान को अंडरस्कोर में बदल दिया गया है।

मैं YYYY-MM-DDतिथि प्रारूप का उपयोग करना चाहूंगा , लेकिन मुझे यकीन नहीं है कि इसे नाम से कैसे अलग किया जाए। एक -नंबर से नाम शुरू होने पर अजीब लगेगा। अगर मैं एक का उपयोग करता हूं _, तो यह एक अंतरिक्ष का प्रतिनिधित्व करने वाले अंडरस्कोर के साथ संघर्ष करता है।

फ़ाइल नाम में कौन से अक्षर यथोचित रूप से सुरक्षित हैं जो यहां काम करेंगे? मैं लिनक्स पर हूं, लेकिन मैं अन्य लोगों (विंडोज 7, मैक ओएस एक्स) के साथ फाइलें साझा कर सकता हूं।


… यूनिक्स, विंडोज, एक अमिगा 1000 पर?
slhck

ज्यादातर आधुनिक लिनक्स।
मार्टिन उडिंग

- प्रतीक खिड़कियों पर 7 का उपयोग करने के लिए सुरक्षित है .. हो सकता है कि अन्य आधुनिक ऑपरेटिंग सिस्टम एक ही हो .. आप अलग करने के लिए माइनस प्रतीक का उपयोग कर सकते हैं ..
निरंजन सिंह

संभव क्रॉस साइट डुप्लिकेट: stackoverflow.com/questions/4814040/…
Ciro Santilli 中心:::

जवाबों:


48

सारांश:

  • विंडोज: एएससीआईआई के नियंत्रण पात्रों और को छोड़कर कुछ भी \/:*?"<>|
  • लिनक्स, OS-X: अशक्त या को छोड़कर कुछ भी /

सभी प्लेटफार्मों पर गैर-मुद्रण योग्य पात्रों जैसे कि ASCII नियंत्रण-पात्रों से बचना सबसे अच्छा है।

खिड़कियाँ

विंडोज में, विंडोज एक्सप्लोरर नियंत्रण-वर्णों की अनुमति नहीं देता है या \/:*?"<>|आप रिक्त स्थान का उपयोग कर सकते हैं। यदि आप रिक्त स्थान का उपयोग करते हैं, तो आपको अक्सर कमांड लाइन से उपयोग किए जाने पर फ़ाइल नाम को उद्धृत करना होगा (लेकिन GUI ऐप अप्रभावित हैं जहां तक ​​मुझे पता है)। NTFS जैसे विंडोज फाइल सिस्टम जाहिरा तौर पर फ़ाइल नाम के साथ एन्कोडिंग को संग्रहीत करता है, लेकिन UTF-16 मानक है।

विंडोज के कुछ भाग केस-संवेदी होते हैं, अन्य भाग केस-असंवेदनशील होते हैं। Windows NTFS फाइल सिस्टम पर "Ab" और "ab" जैसे अलग-अलग फ़ाइलनाम बनाना आसान है। ये नाम अलग-अलग फ़ाइलों को संदर्भित करते हैं जिनमें अलग अलग सामग्री होती है। हालाँकि, हालाँकि Windows कमांड-प्रॉम्प्ट खुशी से दोनों फाइलों का उपयोग करके सूचीबद्ध करेगा dir, आप आसानी से उन जैसे कमांड्स का उपयोग करके उनमें से एक का उपयोग या हेरफेर नहीं कर सकते हैं type। निचे देखो।

लिनक्स, ओएस-एक्स

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

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

निष्कर्ष

तो आप शायद सुरक्षित रूप से कुछ का उपयोग कर सकते हैं जैसे (यदि यह टाइप करना इतना कठिन नहीं था)


केस- (इन) विंडोज़ में संवेदनशीलता

C> dir /B
Ab
aB
аB

C> type Ab
b
b

C> type aB
b
b

C> type аB
unicode homograph

ध्यान दें कि हम दूसरी फ़ाइल की सामग्री टाइप नहीं कर सकते हैं, विंडोज typeकमांड सिर्फ एब की सामग्री को वापस करता है। तीसरी फ़ाइल लिनक्स पर भी aB से अलग होगी।

(विंडोज 10 एनटीएफएस)।


1
सभी एक अच्छा जवाब में, लेकिन मैं रिक्त स्थान में फ़ाइल नाम का उपयोग करने से बचना चाहूंगा। सभी संदर्भों में उन्हें सही ढंग से बचाना अधिक मूल्य की तुलना में अधिक परेशानी है। ध्यान दें कि Microsoft सिस्टम निर्देशिका नामों में स्थान का उपयोग करना बंद कर देता है। यदि आपको नामों में शब्द सीमाएँ इंगित करने की आवश्यकता है, तो CamelCase ठीक काम करता है।
आइजैक राबिनोविच सेप

4
Win8 में "C: \ Program files (x86)" अभी भी मौजूद है - क्या यह सिस्टम डायरेक्टरी नहीं है? मैं मानता हूं कि रिक्त स्थान समस्या पैदा कर सकते हैं।
RedGrittyBrick

यह है, लेकिन यह बहुत ज्यादा कुछ भी नाम दिया जा सकता है। बेशक, यदि आप इसे "]: \ foobar" का नाम देते हैं, तो बहुत सारे कार्यक्रम समाप्त हो जाएंगे, लेकिन विंडोज इसे वैसे भी "% प्रोग्रामफाइल्स (x86)%" के रूप में संदर्भित करता है।
थॉमस

2
कुछ वास्तव में यहाँ ध्यान में रखना है, लिनक्स सिस्टम अपरकेस और कम के रूप में अलग पर विचार करने में सक्षम हैं, जबकि विंडोज उन्हें एक ही मानता है।
thecoshman 22

1
आपको आश्चर्य होगा कि कितने कार्यक्रम पार्सिंग में सोते हैं। इसलिए विंडोज 9. नहीं था
आइजैक राबिनोविच

46

जबकि RedGrittyBrick का उत्तर तकनीकी रूप से सही है, सुरक्षा एकमात्र मुद्दा नहीं है: प्रयोज्य भी महत्वपूर्ण है। मुझे लगता है कि एक बेहतर सवाल यह है कि "फ़ाइलनाम में कौन से वर्ण अच्छे हैं"।

कुछ संभावित दिशानिर्देश:

  • [0-9a-zA-Z_] - अल्फ़ान्यूमेरिक वर्ण और अंडरस्कोर हमेशा उपयोग करने के लिए ठीक हैं।
  • \/:*?"<>|और अशक्त बाइट कम से कम एक प्रणाली पर समस्याग्रस्त हैं, और इसे हमेशा टाला जाना चाहिए।
  • रिक्त स्थान को कई प्रणालियों पर तर्क विभाजक के रूप में उपयोग किया जाता है, इसलिए जब संभव हो तो रिक्त स्थान के साथ फ़ाइल नाम से बचा जाना चाहिए। अन्य व्हाट्सएप (जैसे टैब) और भी अधिक।
  • कई प्रणालियों पर अलग-अलग कमांड के लिए अर्धविराम (;) का उपयोग किया जाता है। विंडोज़ कमांड लाइन पर (कुछ संस्करणों पर ) कमांड लाइन तर्क को अलग करने के लिए अर्धविराम और अल्पविराम (,) का उपयोग किया जाता है ।
  • []()^ #%&!@:+={}'~और [`] सभी के कई गोले में विशेष अर्थ हैं, और चारों ओर काम करने के लिए कष्टप्रद हैं, और इसलिए बचा जाना चाहिए। वे URL में भयानक दिखते हैं
  • बचने के लिए अग्रणी पात्र :
    • कई कमांड लाइन कार्यक्रम विशेष तर्कों को इंगित करने के लिए हाइफ़न [-] का उपयोग करते हैं ।
    • * निक्स आधारित प्रणालियाँ छुपी हुई फ़ाइलों और निर्देशिकाओं के लिए एक प्रमुख चरित्र के रूप में एक पूर्ण विराम [।] का उपयोग करती हैं ।
  • ASCII सेट में कुछ भी नहीं पुराने या अधिक बुनियादी सिस्टम (जैसे कुछ एम्बेडेड सिस्टम) पर समस्याएं पैदा कर सकता है, और देखभाल के साथ उपयोग किया जाना चाहिए।

वह मूल रूप से आपका साथ छोड़ देता है:

[0-9a-zA-Z -._]

यह हमेशा सुरक्षित है और उपयोग करने के लिए कष्टप्रद नहीं है (जब तक आप अल्फा-न्यूमेरिक के साथ फ़ाइल नाम शुरू नहीं करते हैं) :)


1
ब्रेसिज़ ( []) नियमित अभिव्यक्ति का हिस्सा हैं और शेल में भी इसका विशेष अर्थ है। लेकिन वे कुछ बुरे कोने के मामलों को छोड़कर काम करने के लिए उतने बुरे नहीं हैं।
मार्टिन यूडिंग

1
Hrm ... मुझे लगता है कि ()वास्तव में उसी के बारे में कहा जा सकता है ।
n

4
Zsh में, अलग-अलग व्याख्या किए जा सकने वाले वर्ण शामिल हैं []()^;, इसलिए मुझे लगता है कि सही उत्तर वास्तव में हो सकता है [0-9a-zA-Z.,_-]कॉमा को भी संभवतः इसलिए ही बाहर रखा जा सकता है क्योंकि यह एक फ़ाइल नाम में देखना अजीब है, हालांकि मैं एक वास्तविक मामले के बारे में नहीं सोच सकता जहां यह कारण होगा समस्या।
केसी रोडरमोर

हाँ, मैंने उन्हें
बजे

1
अल्पविराम कष्टप्रद हो सकता है, echo whereami > a,b,cWin10 कमांड प्रॉम्प्ट विंडो में प्रयास करें ।
RedGrittyBrick

4

आप ऐसा कर सकते हैं:

  1. वर्तमान अंडरस्कोर की जगह #(प्रूफरीडर के प्रतीक के लिए)
  2. फ़ाइल नाम से 'खंड' की तारीख को अंडरस्कोर करें (या एक दूसरा हाइफ़न - टाइप करने में आसान)

Alt-1। प्रारंभिक-कैप रिक्त स्थान बदल सकते हैं: YYMMDD-HHMM-FileName.extयाYYMMDD-HHMM_FileName.ext

स्पष्ट प्रदर्शन के लिए न्यूनतम वर्ण, जो जन-सेप (& 1st-9th ea मो) के लिए गद्देदार जीरो के साथ ऑटो-सॉर्ट करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.