অজানা নাম সহ ডিরেক্টরিতে যান


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 দীর্ঘ তালিকার জন্য (alচ্ছিক)
  • -i ইনোড মান পেতে
  • -a সমস্ত ফাইল, এমনকি লুকানো ফাইল (alচ্ছিক) দেখতে

তালিকায় আপনি প্রথম কলামে একটি দীর্ঘ সংখ্যা দেখতে পাবেন, এরকম কিছু:

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/

ধরে নিচ্ছি যে এটি কাজ করে না আপনি নীচের নিকটে আরও একটি বিকল্প উল্লেখ করেছেন:

অ্যাক্টালডাম্প নামে ডেল হিসাবে এখনও অবধি অজানা ছিলাম (ডিবিয়ান - / ইউএসআর / বিন / ওডে)

$ ls | od -b

আপনাকে নিয়ন্ত্রণ কোডগুলির অষ্টাল ফর্মটি দেখাবে।

$ ls | od -c

শেষে থাকা কোনও লুকানো অতিরিক্ত শ্বেত স্থান সহ আপনাকে অক্ষরগুলি দেখাবে (শেষের দিকে অতিরিক্ত স্পেসগুলি তাদের উদাহরণে নোট করুন)

একবার আপনি কী কী নিয়ন্ত্রণের অক্ষরগুলি খেলতে চলেছেন এবং অতিরিক্ত লুকানো শ্বেতক্ষেত্র রয়েছে তা জানার পরে আপনি নিয়ন্ত্রণের অক্ষরগুলি থেকে বেরিয়ে ডিরেক্টরিতে সিডির কোনও উপায় ফিনগল করতে সক্ষম হতে পারেন। এটি ব্যর্থ হওয়ায় ডিরেক্টরিটির নাম পরিবর্তনের জন্য আপনার কাছে কয়েকটি বিকল্প রয়েছে।

উপরের পৃষ্ঠায়, সুবিধামতভাবে, এমভি কমান্ডের মাধ্যমে নিয়ন্ত্রণের অক্ষরগুলি সরিয়ে দেওয়ার জন্য একটি দ্রুত এবং নোংরা পদ্ধতি রয়েছে, যা আমি মনে করি কাজ করবে, যতক্ষণ আপনি স্থানটি অব্যাহতি রাখবেন না, তবে প্রশ্ন চিহ্নগুলি থেকে দূরে থাকবেন না (ফলস্বরূপ তাদের একক চরিত্র তৈরি করুন) ওয়াইল্ডকার্ডস), এবং যতক্ষণ না এই দুর্বৃত্ত ডিরেক্টরিটি রয়েছে সেই ডিরেক্টরিতে আর কিছুই উপস্থিত নেই। এই স্পষ্ট প্রয়োজনীয়তার কারণ হ'ল আপনি কেবল ওয়াইল্ডকার্ড অক্ষর এবং একক স্থান ব্যবহার করছেন এবং তাই আপনি চাইছেন না যে ওয়াইল্ডকার্ড অজান্তে অন্য কোনও ফাইল বা ডিরেক্টরিতে মেলে না।

যদি উপরের পদ্ধতিটি কাজ না করে, আপনি প্রায় নিশ্চিতভাবেই অন্যান্য প্রতিক্রিয়া দ্বারা উল্লিখিত সন্ধানের পদ্ধতিটি ভিন্ন উপায়ে ব্যবহার করতে পারেন। ইনোড নম্বরটি ব্যবহার করে ডিরেক্টরিটিতে সিডি করার চেষ্টা করার পরিবর্তে আপনি যা চেষ্টা করেছেন বলেছিলেন, আপনি ইনোড নম্বরটি ব্যবহার করে এটির নাম পরিবর্তন করতে পারেন। উপরের পৃষ্ঠাটি থেকে কেবলমাত্র একটি কমান্ডের জন্য 3 টি লাইনের সম্পূর্ণ সেটটি অনুলিপি করে নিশ্চিত করে নিন ("তবে আপনি নিজের নাম পরিবর্তন করতে চান এমন প্রকৃত নামের সাথে" পছন্দসই নামটি "অংশটি প্রতিস্থাপন করুন)।

ডিরেক্টরিটি পুনরায় নামকরণ করা হলে, আপনি এটি অ্যাক্সেস করতে সক্ষম হবেন। আমি কেবল এটিই আশা করতে পারি যে এতে নামগুলিতে কন্ট্রোল কোড সহ ফাইলগুলিও নেই, অথবা আপনি যে ডিরেক্টরিটি পুনরায় নামকরণ করেছেন তার প্রতিটি ফাইল (এবং / অথবা উপ-ডিরেক্টরি) জন্য আপনি ধুয়ে ফেলতে এবং পুনরায় পুনরায় পুনঃস্থাপন করতে হবে, যেখানে লুপের জন্য একটি হবে ১: :-) থেকে বাড়িয়ে প্রতিটি ফাইলকে কেবল একটি নাম্বার হিসাবে বুদ্ধিমান হতে হবে


0

"?" শেলটির একটি বিশেষ অর্থ রয়েছে, এর অর্থ "কোনও অক্ষর, কোনওটিই নয়"। সুতরাং আপনার ফাইলটির যদি সত্যই নামকরণ হয় "????????????????????????" আপনি সম্ভবত "পালাতে হবে?" (এবং স্পেসস টুস) তাই আপনি সিডি \? \? \? \? \? \? \? \? \? \? \? (যদি আপনি ইতিমধ্যে চেষ্টা না করেন)

এটি ধরে নেওয়া হচ্ছে যে কেউ উদ্দেশ্যমূলকভাবে ফাইলটিকে সেই ছদ্মবেশী নাম দিয়েছিল, বরং এটি গার্ফल्ड / নষ্ট / অবৈধ এনকোডিং।


1
তবে মনে রাখবেন যে ASCII নন ((0x7F) হিসাবে অক্ষর প্রদর্শন করতে lsপছন্দ করে - সুতরাং ডিরেক্টরিটির নাম সম্ভবত প্রশ্ন চিহ্নের একটি স্ট্রিং নয়। ?
স্কট

0

একটি কি ls। ডিরেক্টরিতে (ফাইল বা উপ-ডিরেক্টরি) এমন কোনও নাম রয়েছে যা আপনার রহস্যের উপ-ডিরেক্টরিের চেয়ে দীর্ঘ (যা 21, যদি আপনার "????????????????????" সঠিক)? তারপরে তাদের নাম ছোট করে নামকরণ করুন বা এগুলি অন্য ডিরেক্টরিতে স্থানান্তর করুন। তারপরে টাইপ করুন

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

এই ওয়াইল্ডকার্ডের (20 টি প্রশ্নের চিহ্নের পরে একটি তারকাচিহ্ন) 20 অক্ষর দীর্ঘ বা দীর্ঘতর যে কোনও নামের সাথে মেলে should এবং আমি যে প্রথম নির্দেশ দিয়েছি তা নিশ্চিত করা উচিত ছিল যে আপনার রহস্যের উপ-ডিরেক্টরি কেবল সেই ধরণের সাথে মেলে। তবে এটি করা আরও কার্যকর হতে পারে

mv ????????????????????* নতুন নাম


3
এটি ফাইল নামের একটি সঠিকভাবে পালানো সংস্করণ উত্পাদন করতে বাধ্য করার lsজন্য হয় --quoting-style=shellবা --quoting-style=escapeবিকল্পের সাথে চালানো সহায়ক হতে পারে ।
ড্যান ডি

1
@DanD। শীতল বিকল্পের জন্য +1 আমি জানতাম না। আমি সাধারণত একটি গুই ফাইল ম্যানেজার ব্যবহার করি যখন এই জাতীয় কিছু মোকাবেলা করতে হয় তবে এটি যদি আমার কোনও কনসোল থেকে বা স্ক্রিপ্টের মধ্যে কাজ করতে হয় তবে তা কার্যকর হতে পারে।
জো

0

কী রয়েছে তা দেখার একটি সহজ উপায় হ'ল ফাইলজিলা সহ মেশিনে এফটিপি। তারপরে আপনি ডিরেক্টরিটির নাম পরিবর্তন করতে ফাইলজিলা ব্যবহার করতে পারেন।


0

ডিরেক্টরিতে কাজ করতে একটি ফাইল ব্রাউজার যেমন মিডনাইট কমান্ডার (পাঠ্য), নটিলাস (জিনোম) বা ডলফিন (কেডিএ) ব্যবহার করুন।


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)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.