अज्ञात नाम से डायरेक्टरी पर जाएं


8

टारबॉल को अनपैक करते समय, मुझे एक निर्देशिका का सामना करना पड़ा जो ls"?????????????????" के रूप में रिपोर्ट करती है। शायद, नाम यूनिकोड में नहीं है? वैसे भी, मैं फ़ोल्डर तक पहुँचने का एक तरीका नहीं समझ सकता। मैंने कोशिश की है cd $(find -inum inode_number), लेकिन वह मुझे देता है

"bash: cd: ./??????????: No such file or directory".

क्या किसी अन्य तरीके से किसी फ़ोल्डर को सीधे इनोड नंबर द्वारा एक्सेस करना है?


क्या यह शायद निर्देशिका सूची में पहले स्थान पर है? तब cd */काम हो सकता है। *डायरेक्टरी के शेल समझने योग्य विवरण का विस्तार करना चाहिए, और cdअतिरिक्त तर्कों को अनदेखा करना चाहिए । एक अन्य तरीका ग्राफिकल फ़ाइल मैनेजर (टर्मिनल आधारित एमसी सहित) या बिल्ट-इन-फ़ाइल फ़ाइल नेविगेटर जैसे उदाहरण विम का उपयोग करना हो सकता है। आप -execस्विच के साथ find, not with cd` को भी सीधे प्रयोग कर सकते हैं (जो कि एक शेल निर्मित है) लेकिन उदाहरण के लिए lsऔर अन्य उपकरणों के साथ।
डैनियल एंडर्सन

@ डैनियल: कुछ गोले में, cdकई तर्क के साथ विफल रहता है।
स्कॉट

@ सच: सच। POSIX कई तर्कों का व्यवहार निर्दिष्ट नहीं करता है। बैश और डैश अतिरिक्त तर्कों को अनदेखा करते हैं, csh " too many arguments" के साथ बाहर निकलता है ।
डैनियल एंडरसन

जवाबों:


3

किसी भी निर्देशिका (या फ़ाइल) पर काम करने में सक्षम होने के लिए एक सामान्य तरीका है कि वह इनोड संख्या का उपयोग कर सके।

सबसे पहले, प्रश्न में फ़ोल्डर का इनकोड प्राप्त करने के लिए ls का उपयोग करें:

ls -lia
  • -l लंबी सूची के लिए (वैकल्पिक)
  • -i इनकोड मान प्राप्त करने के लिए
  • -a सभी फ़ाइलों को देखने के लिए, यहां तक ​​कि छिपी हुई फ़ाइलें (वैकल्पिक)

लिस्टिंग में आपको पहले कॉलम में एक लंबी संख्या दिखाई देगी, कुछ इस तरह से:

2104697 drwx------ 2 user group 4096 date time WEIRD_DIRNAME

अब आप उस निर्देशिका का उपयोग करके बदल सकते हैं:

cd "$(find -inum ######)"

... लेकिन ###### निर्देशिका लिस्टिंग में आपको जो लंबी संख्या मिली है, उसे प्रतिस्थापित करना।

बेशक कमांड का होना जरूरी नहीं है cd। यह हो सकता है rm, cp, mv, आदि ...


2

चूँकि वर्ण संभावित अंतर्राष्ट्रीय वर्ण हैं, वे आपके en_US वर्ण सेट में नियंत्रण कोड के रूप में दिखाई दे रहे हैं, यही कारण है कि ls उन्हें प्रश्न चिह्न के रूप में दिखा रहा है।

यह आपके वितरण के वैश्विक प्रोफ़ाइल में डिफ़ॉल्ट रूप से अलियासिंग ls की पसंद के कारण हो सकता है। उदाहरण के लिए:

alias ls='ls -q'

आप देख सकते हैं कि आपके वितरण ने आपके शेल में टाइप करके क्या किया है:

alias ls

जो निम्नलिखित की तरह कुछ प्रिंट करेगा:

$ alias ls
alias ls='ls --color=auto'

नीचे दिए गए पृष्ठ से पता चलता है कि यदि आप "ls -b" करते हैं, तो आपको ऑक्टल कंट्रोल कोड दिखाई देंगे, ताकि आप कम से कम यह जान सकें कि कौन से अक्षर उपयोग में हैं।

http://www.arsc.edu/arsc/support/howtos/nonprintingchars/

यह मानते हुए कि आपके पास एक और विकल्प नहीं है, वहां भी नीचे की ओर उल्लेख किया गया है:

एक उपकरण जिससे मैं अब तक अनजान था, जिसे ऑकलडंप कहा जाता था (डेबियन पर - / usr / bin / od)

$ ls | od -b

आपको नियंत्रण कोड का अष्टाधारी रूप दिखाएगा।

$ ls | od -c

आपको किसी भी छिपे हुए अतिरिक्त व्हाट्सएप सहित वर्ण दिखाएंगे जो अंत में हो सकते हैं (उनके उदाहरण में अंत में अतिरिक्त रिक्त स्थान पर ध्यान दें)

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

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

यदि उपरोक्त विधि काम नहीं करती है, तो आप अन्य प्रतिक्रियाओं द्वारा उल्लिखित खोज विधि का उपयोग लगभग अलग तरीके से कर सकते हैं। इनडोड संख्या का उपयोग करके निर्देशिका में सीडी की कोशिश करने के बजाय, जो आपने कहा है कि आपने कोशिश की है, आप इनोड संख्या का उपयोग करके इसका नाम बदल सकते हैं। बस ऊपर के पेज से उस एक कमांड के लिए 3 लाइनों के पूरे सेट को कॉपी करना सुनिश्चित करें (वास्तविक नाम के साथ "वांछित-नाम" भाग को बदलें, हालांकि आप इसे फिर से नाम देना चाहते हैं)।

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


0

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

यह मानते हुए कि किसी ने जानबूझकर फ़ाइल को मुश्किल नाम दिया है, बल्कि वह विकृत / भ्रष्ट / अवैध एन्कोडिंग है।


1
लेकिन याद रखें कि गैर-एएससीआईआई अक्षर (70x7F) lsको प्रदर्शित करना पसंद करते हैं? - इसलिए निर्देशिका नाम शायद प्रश्न चिह्नों का एक तार नहीं है।
स्कॉट

0

ए करें ls। क्या निर्देशिका (फ़ाइल या उपनिर्देशिका) में कुछ भी ऐसा नाम है जो आपके रहस्य उपनिर्देशिका से अधिक है (जो 21 वर्ष का है, यदि आपका "?????????????????" "" है? सटीक)? फिर उन्हें छोटे नामों में बदल दें या अन्य निर्देशिकाओं में ले जाएं। फिर टाइप करें

cd ????????????????????*

इस वाइल्डकार्ड (तारांकन के बाद के 20 प्रश्न चिह्न) किसी भी नाम से मेल खाना चाहिए जो कि 20 वर्ण लंबा या लंबा है-और पहला निर्देश जो मुझे देना चाहिए था, यह सुनिश्चित करना चाहिए कि आपका रहस्य उपनिर्देशिका केवल एक चीज है जो उस पैटर्न से मेल खाती है। लेकिन ऐसा करना अधिक उपयोगी हो सकता है

mv ????????????????????* नया नाम


3
यह या lsतो विकल्प के साथ चलाने में मददगार हो सकता है --quoting-style=shellया --quoting-style=escapeइसे उस फ़ाइल नाम के ठीक से बच गए संस्करण के उत्पादन के लिए मजबूर कर सकता है।
दान डी।

1
@DanD। कूल विकल्प के लिए +1 जिसके बारे में मुझे नहीं पता था। मैं आमतौर पर सिर्फ एक gui फ़ाइल प्रबंधक का उपयोग करता हूं जब इस तरह की किसी चीज से निपटा जाना होता है, लेकिन यह काम आ सकता है अगर मुझे कंसोल से या स्क्रिप्ट के भीतर काम करना पड़े।
जो

0

यह देखने का एक आसान तरीका है कि फाइलज़िला के साथ मशीन में एफ़टीपी क्या है। फिर आप निर्देशिका का नाम बदलने के लिए FileZilla का उपयोग कर सकते हैं।


0

निर्देशिका के साथ काम करने के लिए फ़ाइल ब्राउज़र जैसे कि मिडनाइट कमांडर (टेक्स्ट), नॉटिलस (GNOME) या डॉल्फिन (केडीई) का उपयोग करें।


0

निर्देशिकाओं (या फ़ाइलों) के साथ काम करना जिनके नाम टाइप करने के लिए अजीब / कठिन हैं:

1) ls -iफ़ाइल के इनकोड को खोजने के लिए चलाएँ ।

यह lsविकल्प आपको फ़ाइल का प्रत्येक नाम और फ़ाइल सिस्टम पर इस फ़ाइल के लिए एक पहचानकर्ता (इनोड) देगा

2) फाइल पर कमांड चलाने के लिए फाइंड का उपयोग करें

इनोड 9961926 था

आप दौड़ सकते हैं

 find * -prune -inum 9961926 -exec rm -i {} \;

फ़ाइल को हटाने के लिए

या

 find * -prune -inum 9961926 -exec mv {} other-name \;

इसे एक बेहतर नाम पर ले जाने के लिए

या और भी

 find * -prune -inum 9961926 -exec ln -s {} non-horrible-name \;

पुराने नाम को रखते हुए इसे एक नया नाम दें

(संभवतः, आप अन्य कमांड भी चला सकते हैं। दुर्भाग्य से मैं चलाने के लिए इस लाइन का उपयोग नहीं कर सका cd)

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