सांबा माउंट पर अजीब नाम के साथ फ़ाइल का नाम बदलें


10

मैं कुछ उचित करने के लिए अजीब नाम के साथ फ़ाइल का नाम बदलना चाहता हूं, हालांकि मैं इसके लिए सक्षम नहीं हूं: / /

$ mv *_000c.jpg 000c.jpg
mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

मैंने इंटरनेट पर कुछ स्थानों में अनुशंसा के अनुसार इनकोड संख्या का उपयोग करने की कोशिश की है:

$ ls -il *000c.jpg
ls: '?j?Z?R?C1_000c.jpg': No such file or directory
213915 -rw-r--r-- 1 wolf wolf 794655 Jul 21  2012 '?j?Z?R?C1_000c.jpg'
$ find . -inum 213915 -print0 | xargs -0 -I '{}' mv '{}' 000c.jpg
mv: cannot move './?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

मुझे क्या करना चाहिए?


1
lsउस निर्देशिका में एक साधारण का आउटपुट क्या है ? क्या फ़ाइल को एक नियमित फ़ाइल के रूप में दिखाया गया है? मैं यह सुनिश्चित करने के लिए कह रहा हूं कि No such file or directoryयह एक ग्लोबिंग त्रुटि है और क्षतिग्रस्त फाइल सिस्टम का संकेत नहीं है।
terdon

1
मुझे आश्चर्य है कि अगर फाइल सिस्टम के माध्यम से चलाने की आवश्यकता है fsck? मैं भ्रष्ट हो सकता हूं। फ़ाइल ने उस नाम को कैसे प्राप्त किया?
Kusalananda

1
@Mioriin फ़ाइल नाम में प्रश्न चिह्न वर्णों के लिए प्लेसहोल्डर हैं (या अच्छी तरह से हो सकते हैं) जिन्हें प्रदर्शित नहीं किया जा सकता है। (एक कारण के उत्पादन को पार्स कभी नहीं करने के लिए ls)
Kusalananda

1
यह एक टर्मिनल फ़ॉन्ट समस्या हो सकती है। यह ?उन अक्षरों के लिए दिखा रहा है जो इसे प्रदर्शित नहीं कर सकते हैं। पूरी तरह से यूनिकोड फ़ॉन्ट पर स्विच करने का प्रयास करें।
मिया रिन

5
@Mioriin फ़ाइल नाम प्रदर्शित किया जा सकता है या नहीं, इस मामले में मुझे लगता है कि एक लाल हेरिंग का एक सा है। यह विचित्र है कि शेल का विस्तार करने में सक्षम है, *_000c.jpgलेकिन mvतब फ़ाइल को संसाधित नहीं किया जा सकता है। यह, IMHO, एक भ्रष्ट फाइल सिस्टम का संकेत है। ... या संभवत: किसी फ़ाइल साझा सिस्टम पर जो नेटवर्क शेयर पर मुहिम शुरू की गई है (निर्देशिका प्रविष्टियों के साथ अभी भी कैश की गई) या कुछ और।
Kusalananda

जवाबों:


16

प्रासंगिक टिप्पणियों का सारांश:

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

हालाँकि, सांबा शेयर के साथ, आपके पास एक मानक यूनिक्स फाइलसिस्टम की तुलना में फ़ाइल नाम पर स्पष्ट रूप से अधिक सख्त आवश्यकताएं हैं।

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

mvकाम नहीं किया क्योंकि नाम ग्लोबिंग पैटर्न के विस्तार के लिए सांबा शेयर से लौटे होस्टिंग फाइल सिस्टम, केवल सांबा के नाम का खुद घायल संस्करण पर फ़ाइल का वास्तविक नाम नहीं था।

आपका समाधान सर्वर में लॉग इन करना था जो वास्तव में फ़ाइल को होस्ट किया था (सांबा की तुलना में कम प्रतिबंधात्मक नामकरण नियमों के साथ एक फाइल सिस्टम पर) और फ़ाइल का नाम बदल दें। यह कार्रवाई का सही तरीका था।

इस प्रश्न के बारे में यूनिक्स और लिनक्स चैट भी देखें ।


-2

इससे पहले कि मैं यूनिक्स गोले में उद्धृत करने के बारे में सीखूं, मैं diredहार्ड-टू-मैच फ़ाइलों का नाम बदलने या हटाने के लिए एमएसीएस मोड का उपयोग करूंगा । आप बस निर्देशिका को emacs में खोलें:

emacs -q .

... तब आप उस फ़ाइल को नेविगेट करने के लिए तीर कुंजियों का उपयोग कर सकते हैं जिसे आप संशोधित करना चाहते हैं और फ़ाइल का नाम बदलना चाहते हैं R?आपको उपलब्ध आदेशों की सूची देगा (आप उन फ़ाइलों को हटा सकते हैं जो बहुत मुश्किल से मेल खाते हैं)।

तो आप बस C-x C-cअपना रास्ता emacs से बाहर है और आप कर रहे हैं।


-3

अक्सर असामान्य फ़ाइल नाम के साथ आप फ़ाइल नाम और लिनक्स से पहले "./" जोड़ सकते हैं, इसे ठीक से पहचान लेंगे। उदाहरण के लिए: $ ls ./?j?Z?R?C1_000c.jpg

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