मेरे एक फ़ोल्डर में दो फ़ाइलों का नाम समान कैसे हो सकता है?


12

मैंने दो फाइलें डाउनलोड कीं, वे दोनों एक ही फ़ाइल नाम में सहेजे गए थे और फिर मैंने उन्हें दूसरे कंप्यूटर पर scp के साथ स्थानांतरित कर दिया।

जब दूसरा बच गया तो वे एक क्यों नहीं हुए?


2
क्या आप ls -laकृपया परिणाम दिखा सकते हैं ?
रेकायो

2
बेहतर अभी तक, ls -lb(या ls -lab, यदि नाम से शुरू होता है .)।
जी-मैन का कहना है कि 'मोनिका'

1
इसके अलावा, क्या, वास्तव में, क्या हुआ? आपने मशीन X पर डाउनलोड किया dir1/fooऔर dir2/fooफिर scpउन्हें dir42मशीन Y पर एड किया और वे एक ही नाम से अलग-अलग फाइल के रूप में सामने आए? या आपने एक ही डायरेक्टरी (मशीन X पर) में एक ही नाम वाली दो फाइलें डाउनलोड कीं, और वे एक ही नाम के साथ अलग-अलग फाइलों के रूप में सामने आईं?
जी-मैन का कहना है कि 'मोनिका'

जवाबों:


39

हो सकता है कि वे केवल उसी तरह दिखते हों जैसे उनका एक ही नाम हो।

प्रयत्न:

$ touch Stéphane Stéphane Stéphane\  St​éphane
$ ls -1
Stéphane
Stéphane
St​éphane
Stéphane 

वे बहुत ज्यादा एक जैसे दिखते हैं।

$ ls -1b
Stéphane
Stéphane
St​éphane
Stéphane\ 

थोड़ा बेहतर। अंतरिक्ष चरित्र को ध्वजांकित किया जाता है \ (हालांकि सभी lsकार्यान्वयन ऐसा नहीं करते हैं)।

$ LC_ALL=C ls -1b
Ste\314\201phane
St\303\251phane
St\303\251phane\ 
St\342\200\213\303\251phane

अब हम बात कर रहे हैं (सभी गैर-एएससीआईआई पात्रों को उनके बाइट घटकों के अष्टक मूल्य के रूप में प्रस्तुत किया गया है)

आप यह भी कर सकते हैं, और यह किसी भी इनपुट के लिए काम करता है:

$ ls | LC_ALL=C sed -n l
Ste\314\201phane$
St\303\251phane$
St\342\200\213\303\251phane$
St\303\251phane $

यहां, लाइनों के अंत को चिह्नित किया गया है $जिसके कारण अनुगामी स्थान को स्पॉट करना आसान हो जाता है। हालाँकि, यह फ़ाइल नामक स्थान को खोलने में मदद नहीं करेगाStéphane<newline>Stéphane

$ ls | perl -Mopen=locale -MUnicode::UCD=charinfo -lpe '
       s/[^\41-\177]/"<".charinfo(ord$&)->{name}.">"/ge'
Ste<COMBINING ACUTE ACCENT>phane
St<LATIN SMALL LETTER E WITH ACUTE>phane
St<ZERO WIDTH SPACE><LATIN SMALL LETTER E WITH ACUTE>phane
St<LATIN SMALL LETTER E WITH ACUTE>phane<SPACE>

यह स्पष्ट करता है कि क्या हुआ।

विषय पर अधिक के लिए यह अन्य उत्तर भी देखें ।


1
यदि आप मुझे स्टीफन से पूछने में कोई आपत्ति नहीं करते हैं, तो पाइप्ड कमांड क्या करता LC_ALL=C sed -n 1है?
रेकायो

3
sed's lनिर्देश नेत्रहीन रूप में इनपुट प्रदर्शित करता है। LC_ALL = C के साथ, हम यह सुनिश्चित करते हैं कि इसके लिए केवल ASCII वर्णों का उपयोग किया जाता है (हालांकि कम से कम GNU के साथ sed, यह आवश्यक नहीं है)।
स्टीफन चेज़लस


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

धिक्कार है, टीआईएल कि आप एक फ़ाइल नाम के अंत में रिक्त स्थान हो सकते हैं और ऐसा लगता है कि फाइलसिस्टम पर दो पहचान नाम वाली फाइलें हैं! महान जवाब, ls | LC_ALL=C sed -n lवास्तव में अभी एक बड़ा समय बचाने वाला था, धन्यवाद!
एलियाह लिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.