ফ্রিবিএসডি: ডিরেক্টরি called সি (সত্যই!) নামে পরিচিত - কীভাবে সরাবেন?


127

আমি টাইপ করেছি:

$ history
169 9:34    la /usr/local/etc/
170 9:35    sudo mkdir ^C
171 9:36    sudo mkdir /usr/local/etc/dnsmasq.d

এখন আমার কাছে একটি ফাইল রয়েছে যা ^ C (ctrl + C) বলে !! আমি যখন ব্যবহার lsকরি তখন আমি কেবল একটি প্রশ্নচিহ্ন দেখতে পাই (সম্ভবত লোকেলের কারণে?)

% ls -al
total 60
drwxr-xr-x  2 root   wheel    512 Jan 21 09:35 ?        <- this one
drwxr-xr-x  5 admin  wheel    512 Jan 21 16:24 .
drwxr-xr-x  3 root   wheel    512 Jan 20 14:29 ..
-rw-r--r--  1 admin  nobody  1114 Jan 20 19:10 .cshrc
-rw-------  1 admin  wheel   6002 Jan 21 15:27 .history
-rw-r--r--  1 admin  nobody   182 Jan 20 14:29 .login
-rw-r--r--  1 admin  nobody    91 Jan 20 14:29 .login_conf
-rw-------  1 admin  nobody   301 Jan 20 14:29 .mail_aliases
-rw-r--r--  1 admin  nobody   271 Jan 20 19:04 .mailrc
-rw-r--r--  1 admin  nobody   726 Jan 20 19:05 .profile
-rw-------  1 admin  nobody   212 Jan 20 14:29 .rhosts
-rw-r--r--  1 admin  nobody   911 Jan 20 19:06 .shrc
drwx------  2 admin  nobody   512 Jan 20 15:05 .ssh
drwxr-xr-x  2 admin  wheel    512 Jan 20 19:08 bin

এবং

% ls -i
3611537 ?   3611534 bin

আমি এই ফাইলটি সরাতে চাই। আমি চেষ্টা করি mvএবং ট্যাব-সমাপ্তি ব্যবহার করার সময় এটি আমাকে দেখায়:

% mv
^C/  bin/

স্পষ্টতই আমি একটি ^ C টাইপ করতে পারি না: - / আমি কীভাবে এই ফাইলটি সরিয়ে ফেলব?


11
এটি খুব খারাপ যে dsw এটিকে পসিক্সে পরিণত করতে পারেনি।
মার্ক প্লটনিক

12
@ মার্কপ্লটনিক: খুব খারাপ মূল এটি dsw পসিক্সে পরিণত করতে পারেনি।
মাত্তেও ইটালিয়া

4
আমি মনে করি না আপনি এটিটির নাম সিটিআরএল + সি রেখেছেন, আপনি এটির নামকরণ করেছেন ascii অক্ষর যা সেই কীবোর্ড শর্টকাটে ম্যাপ করা হয়েছে, সম্ভবত ETX (ascii 3)। আপনার কনসোল ফন্টে সেই চরিত্রটির জন্য কোনও গ্লাইফ নেই, সুতরাং এটি জেনেরিক সাবস্টিটিউশন গ্লিফ ব্যবহার করে "?"।
jiggunjer

5
emacs -nw -f diredএকটি ডিরেক্টরি নেভিগেটর দেয়। <kbd> ডি </ কেবিডি> নিশ্চিত হওয়ার পরে কার্সারের নীচে ফাইলটি মুছে দেয়।
থোরবজর্ন রাভন অ্যান্ডারসন

9
@ মাত্তিও ইটালিয়া ফাইলনাম এবং অন্যান্য বুদ্ধিমানের ধারণাগুলিতে এটি খুব খারাপ নিয়ন্ত্রণের অক্ষরগুলি এটি পসিক্সে পরিণত করেছে ...
পাইপ

উত্তর:


188

^V( ctrl+ v) পরবর্তী কী-প্রেসের জন্য এক ধরণের অব্যাহতি ক্রম হিসাবে কাজ করে, সাধারণত যুক্ত হবে এমন যে কোনও পদক্ষেপ নেওয়ার পরিবর্তে সংশ্লিষ্ট মানটি সন্নিবেশ করানো।

এটি ব্যবহার করে, ^V^C( ctrl+ v, ctrl+ c) টার্মিনালে আপনার ফাইল ফাইলের নাম প্রবেশের জন্য কাজ করা উচিত।


41
এটি সম্ভবত প্রথম স্থানে তাদের টাইপগুলি তৈরি করেছিল। কীবোর্ডে ভি এবং সি একে অপরের ঠিক পাশেই রয়েছে।
স্টিগ হেমার

14
অথবা তারা বিএসডি টার্মিনালে উইন্ডোজ ক্লিপবোর্ড ব্যবহার করার চেষ্টা করছিল।
জোয়েল কোয়েল

2
@ জোয়েলকয়েলের অভ্যাস কখনও মরে না!
মাফাই

1
মজার বিষয়, Zsh লাইন সম্পাদক কাজ ^V^Cকরে না ; উদ্ধৃত-সন্নিবেশ উইজেট (পৃষ্ঠা অনুসন্ধান ^V) স্পষ্টভাবে বিঘ্ন অক্ষর সন্নিবেশ করা হয় না। জ্যাকবের উত্তর (প্রিন্টফ ব্যবহার করে) শেল আর্গুমেন্টে নিয়ন্ত্রণ অক্ষর সরবরাহ করার আরও পোর্টেবল উপায় হতে পারে।
মাইলস

@ স্টিটিহেমার: যা ঘটতে পারে তা হ'ল আপনি কমান্ডের মাঝখানে Ctrl-C টিপুন, তারপরে এটি ভুলে যান এবং কমান্ডটি পরে কপি-পেস্ট করুন।
মেহরদাদ

89

আপনি ইনোড দ্বারা ফাইলটি সরিয়ে ফেলতে পারেন:

$ ls -i1
290742 foo
293246 ^C
$ find . -inum 293246 -delete

Sakeশ্বরের দোহাই দিয়ে আপনি যা করেন না কেন, তার -deleteসামনে রাখবেন না -inum:

$ touch foo bar baz quux
$ find . -name '*u*' -delete
$ ls
bar baz foo
$ find . -delete -name 'b*'
find: `./baz': No such file or directory
find: `./bar': No such file or directory
$ ls
$ 

অভিনন্দন, আপনি কেবল আপনার সমস্ত ফাইল মুছলেন। সাথে find, যুক্তির আদেশের বিষয়টি গুরুত্বপূর্ণ !


2
কেন -deleteআগে রাখা হয়নি -inum? আপনি অকাল প্রবেশ করতে টিপুন বা যুক্তিগুলির ক্রমটি আসলে পরিণতিটিকে প্রভাবিত করে এমন ক্ষেত্রে এটি কি কেবল একটি সাবধানতা?
পুনরুদ্ধার করুন

10
@ ডেটুউর: অর্ডার ফলাফলকে প্রভাবিত করে। সম্পাদনা দেখুন।
বিশপ

37
করা উচিত -deleteযতক্ষণ না আপনি ছাড়া কমান্ডটি প্রয়োগ করে থাকেন কমান্ড, কাল অনুবাদ করে, এবং -deleteএটা কি আপনি চান খোঁজার যে বার করো।
কাজ

2
@ কাজ কম্যান্ডের কেন্দ্রে -ডিলিট যুক্ত করতে খুব বেশি সাহায্য করবে না
রিয়াদ

9
@ কাজ এর -printপরিবর্তে ব্যবহার করা -deleteখুব ভাল পরীক্ষা করে।
মার্ক রান্সম

32

আরেকটি বিকল্প ব্যবহার করা হয় rm -ri ./*; rmযে কোনও ফাইল এবং ডিরেক্টরি মুছে ফেলার আগে আপনাকে জিজ্ঞাসা করবে, সুতরাং আপনাকে কেবল y"খারাপ" ফাইলটির উত্তর nদিতে হবে এবং অন্য সমস্তকে।

প্রকৃতপক্ষে, আপনার ক্ষেত্রে এমনকি আপনি প্রয়োজনীয় উত্তরগুলিও কেটে ফেলতে পারেন rm -ri ./?, কারণ আপনার "খারাপ" ফাইলটি কেবল একটি অক্ষর দীর্ঘ।


8
select f in ?; do rm -i "$f"; break; doneঅগ্রণী অনাকাঙ্ক্ষিত -iজবাব noদেওয়া বা ভুলভাবে হ্যাঁ উত্তর আপনি উত্তর রাখতে চান একটি উত্তর না দেওয়ার যন্ত্রণা ছাড়াই এর সমস্ত সুবিধা রয়েছে ।
বিশপ

6
ওপি-র ক্ষেত্রে এটি কোনও ডিরেক্টরি নয়, ফাইল। rmdir ?/সমস্ত খালি সিঙ্গেল-অক্ষর ডিরেক্টরিগুলি সরিয়ে ফেলবে এবং অন্যদের শূন্য নয় বলে অভিযোগ করবে।
পিটার কর্ডেস

2
@ বিশপ: ওহো, আমি জানতাম না যে এর selectঅস্তিত্ব, বেশ ঝরঝরে!
মাত্তেও ইটালিয়া

@ পিটারকর্ডস: ওহো, আমি লক্ষ্য করিনি যে আমরা ডিরেক্টরি সম্পর্কে কথা বলছি; আমি যোগ -r(এবং ./- এটা সর্বদা ভুলবেন করা খুবই সহজ) আমার উদাহরণ থেকে, দুর্ভাগ্যবশত যেমন rmdirসমর্থন করে না -iপতাকা। তবুও, আমি মনে করি যে এক্ষেত্রে সবচেয়ে ভাল যাওয়ার উপায়টি বিশপের এবং আপনার মন্তব্যের সংমিশ্রণ হবে।
মাত্তেও ইটালিয়া

1
@ মাত্তিও ইটালিয়া selectকেবলমাত্র কয়েকটি শেলের মধ্যে রয়েছে, সম্ভবত এটির কারণেই আপনি এটি চালাচ্ছেন না - স্ক্রিপ্টগুলি এবং সমাধানগুলি যা বহনযোগ্য বলে বোঝানো হয় এড়াতে পারে, তাই আমরা এটি "বন্যের মধ্যে" দেখার সম্ভাবনা কমই দেখি।
mtraceur

23

একটি বিকল্প হ'ল ফাইলের নাম বাদে অন্য কিছু দিয়ে সন্ধান করা ls। যদি আপনি জানেন যে এটি একটি ভার্বাটিয়াম Ctrl+ দ্বারা উত্পাদিত হয়েছিল C, আপনি নিয়ন্ত্রণের অক্ষরগুলির একটি সারণী ব্যবহার করে বা পাইথনের সরবরাহকৃত মতো আরও বন্ধুত্বপূর্ণ ইন্টারফেস সহ উত্পাদিত ASCII অক্ষরটি খুঁজে পেতে পারেন :

>>> import os
>>> os.listdir('.')
['\x03', ...]

আর একটি বিকল্প হ'ল lsউদাহরণস্বরূপ ব্যবহার করে আউটপুটটির একটি হেক্স্স ডাম্পের দিকে তাকানো hexdump

তারপরে আপনি ফাইলটি মুছতে পারেন (উদাহরণস্বরূপ) এই ব্যাশ কমান্ডটি দিয়ে:

rmdir "$(printf '\x03')"

(আপনি যে অক্ষরটি মুদ্রণের চেষ্টা করছেন তা আপনার IFSচলকগুলিতে যেমন ডাবল কোটগুলির প্রয়োজন হয় তবে \x20বা \x0Aতবে তবে কমান্ড প্রতিস্থাপনের উদ্ধৃতি দেওয়া ভাল অভ্যাস না থাকলে আপনি শেলটি ক্ষেত্র বিভাজন ইত্যাদি করতে চান না)


2
এছাড়াও cat -v(প্লাস man ascii) প্রথম অংশের জন্য সহায়তা করতে পারে।
মাত্তেও ইতালি

13
... বা আপনি os.rmdir('\x03')পাইথন শেল থেকে সরাসরি ব্যবহার করেন ।
moooeeeep

15

প্রায়শই এই ধরণের পরিস্থিতিতে প্রাসঙ্গিক ফাইলটির সাথে মেলে এমন একটি ওয়াইল্ডকার্ড প্যাটার্ন নিয়ে আসা সহজ ।

আপনার ক্ষেত্রে, এটি সহজভাবে হবে ?(সমস্ত ফাইলের নামের সাথে একটি অক্ষরের সাথে মিল রেখে)।

আপনি যা চান তা সত্যিই এটি মেলে তা পরীক্ষা করে দেখুন:

ls -ld ?

এবং তারপরে ডিরেক্টরিটি সরান:

rmdir ?

আপনি এটি ট্যাব সমাপ্তির সাথে একত্রিত করতে পারেন । আপনি টাইপ করতে পারেন

rmdir ?

এবং ট্যাব টিপুন, এবং যেমন ব্যাশ এটি দ্বারা প্রতিস্থাপিত হবে

rmdir ^C/

এবং তারপরে আপনি এন্টার টিপুন এবং এটি আপনি যা করতে চান তা করতে পারে।


11

আপনি ফাইলটি মুছতে মিডনাইট কমান্ডার (এমসি) ব্যবহার করতে পারেন - কেবল উপরের / ডাউন বোতামগুলির সাথে নির্বাচন করুন এবং F8 টিপুন।

এনকোডিংয়ের কারণে ফাইলের নামগুলিতে অদ্ভুত অক্ষর থাকলে আমি মাঝে মধ্যে তা করেছি did


4
বা ঠিক অন্য কোনও ফাইল ম্যানেজার সম্পর্কে।
স্টিগ হেমার

@ স্টিগহ্যামার অবশ্যই কিছু কিছু ফাইলের নাম প্রদর্শন করার জন্য অন্যের চেয়ে ভাল করে better সম্ভবত উত্তরটি ব্যাখ্যা করতে পারে যে কেন কয়েকজন নির্বাচিত অন্যের তুলনায় এমসি একটি সর্বোত্তম পছন্দ। আমি জানি না, যেমন আমি কখনই এটি ব্যবহার করি নি used
can-ned_food 6

7

তবুও অন্য উপায়: statডিরেক্টরিটির নামের একটি অব্যাহত উপস্থাপনা পেতে ব্যবহার করুন :

$ stat *|grep File:
  File: ‘\003’

এখন আপনি ফাইলের নামের উপস্থাপনা জানেন, তাই আপনি নামটি ব্যবহার করে ফাইলটি সরাতে পারেন printf:

$ rmdir -v "$(printf '\003')"
rmdir: removing directory, ‘\003’

অথবা, আপনি যদি ব্যাশ ব্যবহার করছেন তবে আপনি এড়াতে পারবেন printf:

$ rmdir -v $'\003'
rmdir: removing directory, ‘\003’

শেল বশ হলে বিটিডাব্লু, $'\x03'প্রিন্টফ কল করার চেয়ে সহজ। ফ্রিবিএসডি এস এর জন্য একই যা কিছু স্বাদযুক্ত বৈশিষ্ট্য সহ পসিক্স শেলের উপরে প্রসারিত।
নেচ

@ বাশের বিষয়ে ভালো মন্তব্য করুন $'...', তবে আমি সাধারণভাবে অষ্টাল থেকে হেক্সাডেসিমালকে অকেজো রূপান্তর এড়াতে চাই। যেমন ফাইলটির নাম '\111'( statআউটপুট) থাকলে কী হবে? আপনি কি এখনও এটি ব্যবহার করে মুছে ফেলবেন $'\x49'? statআপনাকে যেমন সিকোয়েন্স দিয়েছিল তেমন ব্যবহার করুন : ওপি'র ক্ষেত্রে rmdir $'\003',।
রুসলান

6

একটি সমাধান যা আমার পক্ষে কাজ করেছে তা হ'ল:

rm ./[Tab][Tab][Tab]...

আমি মুছে ফেলতে চাই এমন একটি না পাওয়া পর্যন্ত উপলভ্য ফাইলগুলিতে চক্র চালিয়ে যাওয়া।

তবে এটির কাজ করার জন্য আপনার শেলটিতে প্রয়োজনীয় সেটিংস থাকা দরকার


^ সেঃ আপনি আপনার জন্য +1 ট্যাব অনুক্রমের শুরুতে সত্যিই প্রারম্ভিক।
joshudson

5

সবচেয়ে সহজ উপায় হ'ল সবকিছুকে অস্থায়ী ডিরেক্টরিতে নিয়ে যাওয়া এবং তারপরে rm -r DIRNAME


7
এটি কি আপনার কাছে গৃহীত উত্তরের চেয়ে সহজ বলে মনে হচ্ছে?
ছানা

2
@ ছিকস: এটি আসলে এত খারাপ উত্তর নয়। আমি দেখেছি ^ ভি ^ সি কাজ করছে না যাতে কেউ আটকে যায়।
জোশুদসন

এটি প্রতি সে ভুল নয়, তবে এটি আরও সরাসরি সমাধানের তুলনায় অনেক অতিরিক্ত কাজের মতো বলে মনে হচ্ছে। সম্ভবত আমি লিনাক্স দ্বারা ক্ষতিগ্রস্থ হয়েছি, কিন্তু ^vযুগ যুগ ধরে আমার ধারাবাহিকভাবে কাজ করে চলেছি ।
ছানা

6
^Vফাইলগুলি চারপাশে সরানোর সময় এবং প্যারেন্ট ডিরেক্টরিটি অপসারণের সময় বাচ্চাদের একটি নির্দিষ্ট জ্ঞানের প্রয়োজন হয় তবে এটি প্রাথমিক বিষয়গুলি থেকে উদ্ভূত হতে পারে।
কনডিবাস

5
আপনার সঠিক কাজের পরিবেশের উপর নির্ভর করে Ctrl + V বিপজ্জনকভাবে দ্ব্যর্থহীন ... কিছু টার্মিনাল এমুলেটর এটি একটি পেস্ট হিসাবে ব্যাখ্যা করতে পারে। যদি আপনার পেস্ট বাফারে এমন কোনও কিছুর নাম রয়েছে যা আপনি মুছতে চান না - এবং একটি নতুন লাইন, আপনি কোনও সমস্যার দিকে তাকিয়ে থাকতে পারেন।
রেক্যান্ডবোনম্যান 22'18

1

যদি এটি কেবল খালি ডিরেক্টরি (বা আপনি অন্য খালি ডিরেক্টরিগুলি সরিয়ে ফেলার বিষয়ে চিন্তা করেন না) তবে ব্যবহার করুনrmdir */rmdirখালি নয় এমন ডিরেক্টরি মুছে ফেলতে সক্ষম না হওয়া সম্পর্কে ত্রুটি বার্তা পাবেন , তবে এটি ঠিক আছে। জিএনইউ rmdirসমর্থন করে --ignore-fail-on-non-empty, বা আপনি করতে পারেন 2>/dev/null

চিহ্ন /উল্লিখিত glob শুধুমাত্র ডিরেক্টরির নাম মেলে তোলে।

আপনি বর্তমানে ব্যবহার করে বর্তমানের অধীনে কোন খালি ডিরেক্টরি বিদ্যমান তা আপনি আগেই পরীক্ষা করতে পারেন
find -maxdepth 1 -type d -empty -ls। (এবং আপনি পরিবর্তন করতে পারেন -lsকরতে -deleteযদি তুমি চাও)।

আপনি rmdir [^A-Za-z0-9._]/অ-অক্ষরীয় বা আন্ডারস্কোর ফাইলের নাম দিয়ে শুরু হওয়া ডিরেক্টরিগুলি মেলে এমন একটি আরও নির্দিষ্ট গ্লোব এক্সপ্রেশন ব্যবহার করতে পারেন । আমিও অন্তর্ভুক্ত করেছি ., তবে গ্লোব এক্সপ্রেশনগুলি .সাধারণত কোনওভাবেই মেলে না।


অন্যরা যেমন উল্লেখ করেছে, আপনি এটিকে একটি গ্লোব সহ একক-অক্ষর নামগুলিতে সীমাবদ্ধ করতে পারেন ?: rmdir ?/

rmdirউপায়টির মতো -iবিকল্প rmনেই, সম্ভবতঃ খালি ডিরেক্টরিগুলি সাধারণত মূল্যবান নয় এবং কেবল পুনরায় তৈরি করা যায়।


1
আপনি যে ডিরেক্টরিগুলি পুনরায় তৈরি করতে চান তা জানতে চাই এবং rmdirআপনি যদি -vএটির বিকল্পটি পাস করেন তবে আপনাকে বলতে পারেন (কমপক্ষে জিএনইউতে)।
রুস্লান

@ রুসলান: আপনার যদি অন্য বাসি ডিরেক্টরি না থাকে তবে আপনার আর যত্ন নেওয়া হয়নি এবং সেগুলি সরিয়ে ফেলা বোনাস হবে। আপনি খালি ডিরেক্টরিগুলি সন্ধান করতে পারেনfind -maxdepth 1 -type d -empty -ls
পিটার কর্ডস

-1

ঝুঁকিপূর্ণ কিছু করার আগে প্রথমে চেষ্টা করুন:

rmdir -- ^C

সাধারণভাবে - কোন সীমানা নো-কোশনার নির্দেশনা অনুসরণ করবে তা হ'ল তবে এটি অদ্ভুত চরিত্রগুলিকে অন্য কিছু হিসাবে ব্যাখ্যা করার অনুমতিও দেবে।

আর একটি ব্যবহারের উদাহরণ হ'ল whois -r -- "-r OBJECT-RIPE"

(-র পাকা জন্য একটি শর্টকাট, তবে পাকা হোয়েসটিতে একটি পরামিতিও রয়েছে)

এটি যদি প্রথম চেষ্টাতে কাজ না করে, তবে সম্ভবত চেষ্টা করুন rmdir -- "^C"

তবে আমার সিএস শেলটিতে আমার এটির কোনও দরকার নেই, কেবল rmdir ^Cইতিমধ্যে আমার জন্য কাজ করে।


1
Csh টাইপিংয়ের rmdir পরে <ctrl> সি কাজ করে? সত্যি ?! আমি আশা করব এটি অন্যরকম আচরণ করবে, যথা rmdirআদেশটি বাতিল করে দেওয়া এবং আপনাকে কমান্ডলাইনে ফিরিয়ে দেওয়া।
Mausy5043

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