यह समझना महत्वपूर्ण है कि यह "फाइलसिस्टम भ्रष्टाचार" की तरह नहीं है जो fsck
इसके साथ मदद करेगा। जहाँ तक फाइल सिस्टम का सवाल है, फ़ाइल नाम बाइट्स का कोई भी क्रम हो सकता है , जब तक कि किसी भी बाइट का मान 0x00 (ASCII NUL, C एंड-ऑफ-स्ट्रिंग मार्कर) या 0x2F (नहीं है)/
, निर्देशिका संचालक) न हो। (यदि किसी फ़ाइल का नाम किसी तरह से 00 या 2F बाइट के भीतर मिलता है, fsck
तो उसे ठीक करना चाहिए।)
इसके बजाय, आपके पास फ़ाइल नाम हैं जो एप्लिकेशन सॉफ़्टवेयर (डॉल्फ़िन ls
) , सोचते हैं कि ऐसे अक्षर हैं जो आपके "लोकेल" में अन-डिस्प्लेेबल हैं , इसलिए यह उन्हें प्लेसहोल्डर वर्णों के साथ बदल रहा है। आप टाइप नहीं कर सकते उन वर्णों को हैं, इसलिए फ़ाइलों में हेरफेर करना कठिन है, लेकिन आप इसे तब तक कर सकते हैं जब तक आप इसे बिना टाइपिंग या कॉपी किए और नाम पेस्ट किए बिना कर सकते हैं। उदाहरण के लिए, यदि आप डॉल्फिन के भीतर से समस्या की फाइलों को सीधे हटा देते हैं या नाम बदल देते हैं, तो बस काम करना चाहिए (मैं यह कहने के लिए इतनी दूर जाऊंगा कि अगर यह काम नहीं करता है, तो डॉल्फिन में एक बग है)।
यदि आपको शेल से उनके बारे में कुछ करने की आवश्यकता है (उदाहरण के लिए, यदि वे स्वामित्व में हैं root
और इसलिए उन्हें GUI प्रोग्राम द्वारा संशोधित नहीं किया जा सकता है), तो आप उन्हें "ग्लोब" पैटर्न का उपयोग करके अप्रत्यक्ष रूप से नाम दे सकते हैं, जिसे सही अनुक्रम में विस्तारित किया जाएगा (एस) बाइट्स के साथ और पारित कर दिया।
अब, निश्चित रूप से, आप दुर्घटना से सामान को हटाना नहीं चाहेंगे क्योंकि आपका ग्लोब पैटर्न बहुत अधिक मेल खाता है, इसलिए मेरी सिफारिश rename
प्रत्येक फ़ाइलनाम को हेक्स एन्कोडिंग में बदलने के लिए पर्ल उपयोगिता का उपयोग करना होगा :
$ rename '$_ = unpack("H*", $_)' *
यह किसी भी जानकारी को नष्ट नहीं करता है - न तो फ़ाइल ही, न ही जो भी अर्थ मूल रूप से फ़ाइल नाम में एन्कोड किया गया हो, इससे पहले कि वह मंगाई गई हो। यह उदाहरण के लिए विशिष्ट फ़ाइलों के लिए पूर्ववत किया जा सकता है
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
सावधानी: rename
अलग-अलग मूल से दो कार्यक्रम हैं ; उपरोक्त आदेश केवल पर्ल के साथ उत्पन्न होने वाले के साथ काम करेंगे। उबंटू में, आप जो चाहते हैं वह "नाम बदलें" पैकेज से है, न कि "उपयोग-लिनक्स" पैकेज से। rename -h
भेद करेंगे: यही आप चाहते हैं ...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
... यह वह नहीं है जो आप चाहते हैं ...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
देखने के लिए महत्वपूर्ण बात "पेरलेक्स" है। आपके पास पर्ल नाम का एक पुराना संस्करण हो सकता है जो ऊपर दिए गए सभी विकल्पों को नहीं समझता है, लेकिन मैंने जो कमांड दिखाया वह अभी भी काम करना चाहिए।
संपादित करें: 14.04 .5 अंडर पर्ल स्क्रिप्ट जो इसमें शामिल है rename
, -h स्विच का समर्थन नहीं करती है। आप यह पुष्टि कर सकते हैं कि आपके पास यह सही पेज है man rename
, जिसमें शीर्ष पंक्ति में किस स्थिति में है:
RENAME (1) पर्ल प्रोग्रामर संदर्भ गाइड RENAME (1)