আমি লিনাক্সের এমন ফাইলটি কীভাবে সরিয়ে ফেলব যার নাম দেখে মনে হয় এটি কেবল হাইফেন, যেমন "-"


33

আমি চেষ্টা করেছিলাম

rm -- -
rm "-"
rm "\-"
rm \-

পার্ল একটি শট দিয়েছে

~$ perl -e '$junk = glob("-"); chomp $junk; print "$junk\n"; `rm $junk`;'
-
rm: cannot remove `-': No such file or directory

...এবং...

~$ perl -e '$junk = glob("-"); chomp $junk; print "$junk\n"; `mv $junk newfile.garbage`;'
-
mv: cannot stat `-': No such file or directory

যে কোনও সহায়তা অনেক প্রশংসিত হবে, বুদ্ধিমান লোকেরা।


কৌতূহলের বাইরে, কীভাবে এটি সেখানে পেল?
পিটি বি

2
এটি একটি খারাপভাবে নির্মিত ওয়াজেটের ফলাফল ছিল: " উইজেট - কিউ-ও - someserver.org/s/ip "

53
একজন সহকর্মী * নামের একটি ফাইল তৈরির সময়টির কথা মনে করিয়ে দেয়। এই গল্পটি ভালভাবে শেষ হয়নি।
ডেভিড হেফারনান

আপনি কোন rmসংস্করণ ব্যবহার করছেন ( rm --version)? rm -জিএনইউ কোর্টিলস 8.5 এর সাথে দুর্দান্ত কাজ করে।
লেকেনস্টেইন

2
আর একটি রূপ:rm ./-
একটি সিভিএন

উত্তর:


60

এটি ইউনিক্সের জন্য ইউজনেট FAQ গুলিতে পোস্ট করা হত in আমি দেখতে পাই এটি জিএনইউ কোর ইউটিলিটি এফএকিউগুলিতে রয়েছে । কমপক্ষে পাঁচটি পৃথক পদ্ধতি ছিল তবে এটি ভালভাবে কাজ করে:

$ rm ./-

যদি কোনও ফাইলের নামটিতে অপ্রয়োজনীয় অক্ষর থাকে তবে ব্যবহার করুন:

$ rm -i *

-iপতাকা প্রতিটি ফাইলের জন্য নিশ্চিতকরণ জন্য জিজ্ঞেস করে যে সেটি বা মুছে ফেলা যাবে না।


1
অথবা rm -i - ' - ' আপনি যদি কোনও ড্যাশযুক্ত ফাইল এবং সম্ভবত কিছু স্পেস বা যে কোনও কিছু সন্ধান করছেন।
হ্যান্স-পিটার স্টার

1
rm -i * আমার জন্যও কাজ করেছিল। ধন্যবাদ ওয়ালিকে!
jgrundstad

39

যার নাম দিয়ে শুরু হয় -এমন একটি ফাইল সরিয়ে ফেলা একটি FAQ, তবে দেখে মনে হচ্ছে আপনার অন্যরকম সমস্যা হয়েছে।

প্রশ্নটিতে আপনি যে সমাধানগুলি উল্লেখ করেছেন সেগুলির মধ্যে:

rm -- -

এটা কাজ করা উচিত।

rm "-"

এর থেকে আলাদা কিছু নয় rm -। উদ্ধৃতিগুলি শেল দ্বারা ছিটানো হয়, এবং rmকমান্ডটি কেবল একটি যুক্তি হিসাবে একক হাইফেনকে দেখায়। কোটেশন চিহ্নগুলি শেল মেটাচ্যাকার্স থেকে বেরিয়ে আসার জন্য দরকারী; হাইফেন rmশেল নয়, বিশেষ ।

rm "\-"

উদ্ধৃতি চিহ্নগুলি ব্যাকস্ল্যাশ থেকে রক্ষা পায়, সুতরাং এটি এমন একটি ফাইল সরিয়ে দেওয়ার চেষ্টা করে যার নাম দুটি অক্ষর, একটি ব্যাকস্ল্যাশ এবং হাইফেন নিয়ে থাকে।

rm \-

এটি ঠিক মত rm "-", সমতুল্য rm -

এটা অন্তত এর গনুহ coreutils সংস্করণের সাথে, ঘটে rm, rm -আসলে সরিয়ে ফেলা হবে (অথবা অপসারণ করার প্রচেষ্টা) একটি ফাইল যার নাম শুধু একটি হাইফেন নিয়ে গঠিত। আপনার ফাইলটির সেই নামটি থাকলে এটি এখনই শেষ হয়ে যাবে। আমি উপসংহারে পৌঁছেছি যে আপনার ফাইলটির একটি নাম রয়েছে যা কেবল হাইফেনের মতো দেখায়

ls | cat -A

এটি আসলে কী বলা হয় তার একটি ধারণা দেওয়া উচিত।

এখানে একটি পার্ল স্ক্রিপ্ট আমি কেবল একসাথে ছুঁড়েছি যা আপনাকে বর্তমান ডিরেক্টরিতে প্রতিটি ফাইলের জন্য অনুরোধ করবে এবং এটি অপসারণ করবে কিনা তা জিজ্ঞাসা করবে। ওয়ারেন্টি ছাড়াই অফার করা হয়েছে, তবে আমি এটি সংক্ষেপে পরীক্ষা করেছি।

#!/usr/bin/perl

use strict;
use warnings;

$| = 1;

opendir my $DIR, '.' or die ".: $!\n";
my @files = sort grep { -f $_ } readdir $DIR;
closedir $DIR;

foreach my $file (@files) {
    print "Remove $file? ";
    my $answer = scalar <>;
    if ($answer =~ /^[Yy]/) {
        unlink $file or warn "$file: $!\n";
    }
    elsif ($answer =~ /^[Qq]/) {
        exit 0;
    }
}

সম্পাদনা : একটি কম বিস্তৃত সমাধান: যদি ফাইলটির নামটি কেবল একটি অক্ষর হয় তবে rm ?অবশ্যই এটি অপসারণ করা উচিত (অন্য কোনও ফাইলের সাথে)।


13
M-bM-^@M-^Sইউনিকোড "EN ড্যাশ" অক্ষর, 0x2013 এর 3-বাইট UTF-8 উপস্থাপনার একটি উপস্থাপনা। আমি অবাক হয়েছি আপনি যদি কোনও ওয়েব পৃষ্ঠা থেকে ঘটনাক্রমে অনুলিপি করে আটকে দেন।
কিথ থমসন

7
rm -i *কাজ হয়নি ? মনে হচ্ছে এটি পার্ল স্ক্রিপ্টের মতো একই কাজ করবে।
ব্যবহারকারী 606723

2
আমি অনুমান করছি যে এটি ওয়েব পৃষ্ঠা থেকে উদ্ভূত হয়েছিল যেখানে আমি উইজেটটি নির্দেশ করেছি। যাই হোক না কেন, সম্পূর্ণ সমাধানের জন্য আবার ধন্যবাদ! যত্ন নিবেন.
jgrundstad

5
perl -e 'আনলিংক গ্রেপ {মুদ্রণ "অপসারণ $ _?"; <STDIN> = ~ / y / i} গ্লোব "*" '
র্যান্ডাল শোয়ার্জ

6
@RandalSchwartz: impressively বাহুল্যবর্জিত (এবং আমার মস্তিষ্কের একটি বিট আঘাত তোলে) - কিন্তু আমি চাই চাই /^y/iবদলে /y/i। সর্বোপরি, একজন রাশিয়ান ব্যবহারকারী "Nyet" টাইপ করতে পারেন।
কিথ থম্পসন

19

আপনি যদি নিরাপদ কিছু চান ...

Ls এর সংমিশ্রণটি ব্যবহার করে দেখুন এবং সন্ধান করুন (এটি আপনাকে মুছার অনুমতি রয়েছে এমন কোনও ফাইলের জন্য কাজ করে)

'-I' প্যারামিটার আপনাকে প্রতিটি ডিরেক্টরিতে প্রবেশের জন্য ইনোড নম্বর দেয় ls -li

27 ----------  1 owner  group       3981 Oct 11 04:42 ?????

একবার আপনি ইনোড নম্বর পেয়ে ...

find . -inum **27** -exec rm -i {} \;

2
এটি এই সমস্যাগুলির দুর্দান্ত জবাব হিসাবে এটি +1। পথ খুঁজে সাম্প্রতিক মধ্যে -exec RM ব্যবহৃত করার কোন প্রয়োজন Theres করে, শুধু -delete ব্যবহার
Sirex

2
@ সিরেক্স - আমি মনে করি যে পয়েন্টটি -exec rm -i {}হ'ল -iঅপসারণের অনুরোধ জানানো হবে। আমি দেখছি man findএবং এটি করার কোনও উপায় দেখতে পাচ্ছি না।
স্টিফেন পি

ওহ হ্যাঁ, এই ক্ষেত্রে। একটি টিপ আরও ছিল।
সিরেক্স

13

একবার rm ./-চেষ্টা করুন।

-একটি পতাকা একটি পতাকা যুক্তি শুরু হয়। যদি আপনি -এই ব্যতীত একটি ছাড়া আর কিছু দিয়ে আর্গুমেন্ট শুরু করেন তবে /এটি ফাইলের নাম ধরে নেবে। যা আপনি চান।

এবং যেহেতু fileএবং ./fileএকই ফাইল, এটির -মাধ্যমে ফাইলটিকে টার্গেট করবে ./-


8
30 টি অক্ষর টাইপ করার পরিবর্তে সম্ভবত / কেন সঠিকভাবে বিশ্লেষণ করতে সহায়তা করে তা ব্যাখ্যা করার জন্য এটি আরও কার্যকর হতে পারে
Ivo Flipse

@gcb প্রস্তাবিত সম্পাদনার জন্য ধন্যবাদ। আমি এতে কোড মার্কআপ যুক্ত করেছি, তাই এটি পড়া আরও সহজ হবে।

7

অন্যান্য উত্তরগুলির মতো গৌলবহুল নয়, তবে আমি mcমধ্যরাতের কমান্ডারের একটি উদাহরণ উপস্থাপন করব এবং কেবল ফাইলটি নির্বাচন করে মুছব।


ইস্যুটি চতুরতার সাথে পাশ থেকে পদক্ষেপের জন্য +1 - এবং এটি কোনও জিইউআই প্রোগ্রাম অবলম্বন না করেই।
12 '


6

এখানে পার্ল ব্যবহার করা উচিত নয়, তবে এটি কাজ করা উচিত:

perl -e 'unlink "-"'

অথবা উপরের কোনও ত্রুটি কী হতে পারে তা দেখতে:

perl -e 'unlink "-" or die "Err: $!"'

এই পদ্ধতির সুবিধা রয়েছে যে উদ্বেগ করার জন্য কোনও বিশেষ অক্ষর নেই (স্ট্রিং উদ্ধৃতি ইস্যুগুলি ব্যতীত)।
কেভিন রেইড

3

জিনোমের নটিলাস ব্যবহার করে খারাপ নাম দেওয়া ফাইলগুলি সরাতে আমার ভাগ্য হয়েছে। আপনি কি এক্স-সার্ভার চালাচ্ছেন? আমি নিশ্চিত যে অন্যান্য ফাইল ব্রাউজারগুলিও কাজ করবে।


3

যদি

rm -- -

কাজ হয়নি, ফাইলের নামটি "কেবলমাত্র হাইফেন" নয়। অন্য কোনও ফাইলগুলির মধ্যে হাইফেন না থাকলে আপনি চেষ্টা করতে পারেন

perl -E'for (@_) { if (/-/) { unlink($_) or die $! } }' -- *

1

এখনও অবধি পোস্ট করা প্রতিটি পদ্ধতির জন্য আমি একটি "এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই":

rm ./-
rm -- -
mv "-" test.txt
rm -rf '-' <-- this gives no error, but doesn't work
perl -e 'unlink "-";'  <--also no error, doesn't work.

এটির আরএম সংস্করণ .4.৪ পেয়েছে বলে মনে হয়। আমি এই পরামর্শগুলি আপগ্রেড এবং পুনরায় চেষ্টা করার চেষ্টা করব। সাহায্য করার জন্য সবাইকে ধন্যবাদ।


1
আমি অনুমান করছি যে এরকম কোনও ফাইল বা ডিরেক্টরি নেই এবং সম্ভবত ফাইলের নামটিতে কিছু অদৃশ্য অক্ষর রয়েছে। (এবং আপনি 'লিঙ্কমুক্ত "-" বা মরা "এরর: $!" "দিয়ে পার্লে একই ত্রুটি বার্তাটি পেতে পারেন)। আসল ফাইলের নাম কী তা দেখতে "ls -b" চেষ্টা করুন।
রানরিগ

1

আমি এ diredজাতীয় জিনিসের জন্য ইম্যাক্সে মোড ব্যবহার করার খুব পছন্দ করি - ইম্যাক্সে ডিরেক্টরিটি কেবল "খুলুন"। আপনি ফাইলগুলি সহজেই নির্বাচন করতে পারেন এবং মুছে ফেলার জন্য চিহ্নিত করতে পারেন।

আরেকটি পোস্টার মধ্যরাতের কমান্ডার ব্যবহারের পরামর্শ দিয়েছে; এটি বেশ একই ধারণা, তবে আপনি যদি ইতিমধ্যে ইমাস ব্যবহারকারী হন তবে এটি সম্ভবত আরও সুবিধাজনক।


0

rm -f '-'সাইগউইনে আমার পক্ষে কাজ করতে সক্ষম হওয়া উচিত

এই ক্ষেত্রে, rm -এছাড়াও লাল টুপি কাজ করে বলে মনে হচ্ছে।


উবুন্টুতে: ~ / জেজে $ আরএম-আরএফ '-' ~ / জেজে $

rm -আমার জন্য কাজ করে।
uzsolt

1
কেন -আর? আপনার যদি প্রয়োজন না হয় তবে একটি পুনরাবৃত্ত মোছার জন্য অনুরোধ করা ভুল বানানগুলির ক্ষেত্রে সর্বদা বিপজ্জনক।
হ্যান্স-পিটার স্টার

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