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


আমি একটি টাইপো তৈরি করেছি:

$ 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/

অবশ্যই আমি একটি ^ সি: - / টাইপ করতে পারবেন না আমি কিভাবে এই ফাইল মুছে ফেলবো?


128
2018-01-21 15:55


উত্স


এটা খুব খারাপ যে DSW এটা POSIX মধ্যে না। - Mark Plotnick
@ মার্কপ্লটনিক: খুব খারাপ দ্য মূল  dsw এটা POSIX মধ্যে না। - Matteo Italia
আমি মনে করি না আপনি এটি ctrl + C নামকরণ করেছেন, আপনি এসিচি চরিত্রটির পরে এটির নামকরণ করেছেন যা যে কীবোর্ড শর্টকাটটি ম্যাপ করা হয়, যেমন ETX (ASCII 3) সম্ভবত। আপনার কনসোল ফন্টটিতে সেই অক্ষরের জন্য কোনও গ্লিফ নেই, তাই এটি একটি জেনেরিক প্রতিস্থাপন গ্লাইফ "?" ব্যবহার করে। - jiggunjer
emacs -nw -f dired একটি ডিরেক্টরি ন্যাভিগেটর দেয়। <kbd> D </ kbd> নিশ্চিতকরণের পরে কার্সারের অধীনে ফাইলটি মুছে ফেলে। - Thorbjørn Ravn Andersen
@ ম্যাট্তো ইটালিয়া এটি ফাইলনাম এবং অন্যান্য ক্ষেত্রে খুব খারাপ নিয়ন্ত্রণ অক্ষর আহাম্মক  ধারণা POSIX মধ্যে এটি তৈরি ... - pipe


উত্তর:


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

এই ব্যবহার করা, ^V^C (Ctrl+ +বনাম, Ctrl+ +) টার্মিনাল আপনার কঠিন ফাইলের নাম লিখুন জন্য কাজ করা উচিত।


189
2018-01-21 16:23



এই সম্ভবত কিভাবে ওপি তাদের টাইপ প্রথম স্থানে তৈরি ছিল। ভি এবং সি কীবোর্ডের একে অপরের পাশে ডান। - Stig Hemmer
অথবা তারা বিএসডি টার্মিনালে উইন্ডোজ ক্লিপবোর্ড ব্যবহার করার চেষ্টা করছেন। - Joel Coel
@ জোয়েলকোয়েলের অভ্যাস কখনো মরে না! - Mafii
মজার ব্যাপার হচ্ছে, ^V^C না না জশ লাইন এডিটর কাজ করে; দ্য উদ্ধৃত-সন্নিবেশ উইজেট (জন্য পৃষ্ঠা অনুসন্ধান করুন ^V) স্পষ্টভাবে বিঘ্নিত অক্ষর সন্নিবেশ করা হয় না। জ্যাকব এর উত্তর (printf ব্যবহার করে) একটি শেল আর্গুমেন্টে একটি নিয়ন্ত্রণ চরিত্র সরবরাহ করার আরও পোর্টেবল উপায় হতে পারে। - Miles
@ স্টিগহেমার: কী ঘটতে পারে আপনি কমান্ডের মাঝখানে Ctrl-C চাপুন, তারপরে এটি ভুলে যান এবং পরে কমান্ডটি অনুলিপি করুন। - Mehrdad


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

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

যাই হোক না কেন আপনি, ঈশ্বরের জন্য, রাখা না -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, যুক্তি আদেশ বিষয়!


89
2018-01-22 03:42



কেন রাখা হয় না -delete আগে -inum? আপনি যদি অকালিকালীন এন্টার টিপুন বা আর্গুমেন্টের অর্ডারটি আসলে ফলাফলকে প্রভাবিত করে তবে এটি কি কেবলমাত্র সতর্কতা? - detuur
@ ডেটুউর: অর্ডার ফলাফল প্রভাবিত করে। সম্পাদনা দেখুন। - bishop
রেখো না -delete কমান্ড, সময়, আপনি কমান্ড চালানো না হওয়া পর্যন্ত -deleteআপনি কি চান তা খুঁজে বের করার জন্য এটি চেক করুন। - Kaz
@ কেজ কমান্ডের কেন্দ্রে যোগ করার জন্য অনেক সাহায্য করবে না - RiaD
@ কেজ ব্যবহার করে -print পরিবর্তে -delete একটি খুব ভাল পরীক্ষা করে তোলে। - Mark Ransom


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

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


31
2018-01-21 20:13



select f in ?; do rm -i "$f"; break; done সব সুবিধা আছে -i, উত্তর থাকার যন্ত্রণা ছাড়া no অবাঞ্ছিত নেতৃস্থানীয় বা আপনি ভুলতে চান এক হ্যাঁ উত্তর ভুল। - bishop
OP এর ক্ষেত্রে এটি একটি ফাইল নয়, একটি ফাইল। rmdir ?/ সমস্ত খালি একক অক্ষর ডিরেক্টরি মুছে ফেলা হবে, এবং অননুমোদিত অন্যদের সম্পর্কে অভিযোগ। - Peter Cordes
@ বিশপঃ হোয়া, আমি এমনকি এটা জানতাম না select অস্তিত্ব, বেশ পরিষ্কার! - Matteo Italia
@PeterCordes: wops, আমি লক্ষ্য করিনি যে আমরা ডিরেক্টরি সম্পর্কে কথা বলছি; আমি যোগ করলাম -r (এবং ./ দুর্ভাগ্যবশত, আমার উদাহরণে এটা ভুলে যাওয়া সবসময় সহজ rmdir সমর্থন করে না -i পতাকা। তবুও, আমি মনে করি যে এই ক্ষেত্রে সর্বোত্তম উপায়টি বিশপের এবং আপনার মন্তব্যের সমন্বয় হতে পারে। - Matteo Italia
@MatteoItalia select শুধুমাত্র কিছু শেলগুলিতেই বিদ্যমান, যা সম্ভবত আপনি এতে চালিত না হয়েছেন - স্ক্রিপ্ট এবং সমাধান যা পোর্টেবল হতে পারে তা এড়ানোর জন্য, তাই আমরা এটি "বন্যায়" দেখতে কম সম্ভাবনা বোধ করি। - mtraceur


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

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

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

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

rmdir "$(printf '\x03')"

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


23
2018-01-21 18:51



এছাড়াও cat -v (প্লাস man ascii) প্রথম অংশ জন্য সাহায্য করতে পারেন। - Matteo Italia
... অথবা আপনি ব্যবহার করুন os.rmdir('\x03') সরাসরি পাইথন শেল থেকে। - moooeeeep


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

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

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

ls -ld ?

এবং তারপর ডিরেক্টরি মুছে ফেলুন:

rmdir ?

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

rmdir ?

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

rmdir ^C/

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


15
2018-01-21 21:02





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

আমি কখনও কখনও যখন ফাইল নাম এনকোডিং কারণে অদ্ভুত অক্ষর ছিল যে।


11
2018-01-21 20:29



অথবা শুধু অন্য কোন ফাইল ম্যানেজার সম্পর্কে। - Stig Hemmer
@StigHemmer অবশ্যই, কিছু কিছু ফাইলের নাম প্রদর্শনের জন্য অন্যদের চেয়ে ভাল কাজ করে। সম্ভবত কয়েকটি নির্বাচিত অন্যদের তুলনায় এমসি সর্বোত্তম পছন্দ কেন উত্তর দিতে পারে। আমি জানি না, আমি এটা ব্যবহার করে না। - can-ned_food


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

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

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

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

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

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

7
2018-01-22 10:25



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


আমার জন্য কাজ করা একটি সমাধান হল:

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

যতক্ষণ না আমি এটি মুছে ফেলতে চাই, ততক্ষণ পর্যন্ত উপলব্ধ ফাইলগুলি চক্রের জন্য।

কিন্তু আপনি করতে হবে না প্রয়োজনীয় সেটিংস কাজ করার জন্য আপনার শেল মধ্যে।


6
2018-01-22 08:31



^ সিটি ট্যাব ক্রমিকের প্রথম দিকে তাই আপনার জন্য +1। - joshudson


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


5
2018-01-21 16:31



গ্রহণযোগ্য উত্তরের চেয়ে এটি কি সত্যিই আপনার কাছে সহজ মনে হয়? - chicks
@ চিক্স: আসলে এটি এমন খারাপ উত্তর নয়। আমি দেখেছি ^ ভি ^ সি কাজ করে না তাই কেউ আটকে যেতে পারে। - joshudson
এটি প্রতি ভুল নয়, তবে এটি আরো সরাসরি সমাধানগুলির তুলনায় অনেক বেশি কাজ বলে মনে হয়। হয়তো আমি লিনাক্স দ্বারা নষ্ট করছি, কিন্তু ^v বয়স জন্য ধারাবাহিকভাবে আমাকে কাজ করেছে। - chicks
@chicks ^V কাছাকাছি ফাইল সরানো এবং প্যারেন্ট ডিরেক্টরি অপসারণ করার সময় একটি নির্দিষ্ট জ্ঞান প্রয়োজন বুনিয়াদি থেকে উদ্ভূত হতে পারে। - Kondybas
আপনার +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ যদি আপনার পেস্ট বাফারের এমন কিছু নাম থাকে যা আপনি মুছতে চান না - এবং একটি নতুন লাইন, আপনি একটি সমস্যাটি দেখছেন। - rackandboneman


যদি এটি শুধুমাত্র খালি ডিরেক্টরি (অথবা আপনি অন্য খালি ডিরেক্টরিগুলি সরানোর বিষয়ে উদ্বিগ্ন না হন) ব্যবহার 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
2018-01-22 05:39



আপনি জানতে চান যে কোন ডিরেক্টরি আপনি পুনঃনির্মাণ করতে চান এবং rmdir আপনি পাস যদি আপনি বলতে পারেন -v এটি বিকল্প (অন্তত GNU মধ্যে)। - Ruslan
@ রুসলান: আপনার যদি অন্য কোনও স্টাইল ডিরেক্টরি না থাকে তবে আপনি আর সেগুলির যত্ন নিচ্ছেন না এবং তাদের অপসারণ করা একটি বোনাস হবে। আপনি সঙ্গে খালি ডিরেক্টরি জন্য সন্ধান করতে পারে find -maxdepth 1 -type d -empty -ls - Peter Cordes