যে ফাইলনামে মুদ্রনবিহীন অক্ষর রয়েছে সেগুলি আমি কীভাবে মুছতে পারি?


46

আমি কোনওরকম একটি ফাইল তৈরি করতে পরিচালিত করেছি যার কোনও ফাইল নাম মনে হয় না। নীচের থ্রেডে ফাইলের আরও বিশদ কীভাবে পাবেন সে সম্পর্কিত আমি কিছু তথ্য পেয়েছি

যাইহোক, আমি তালিকাভুক্ত কিছু পরামর্শ চেষ্টা করেছি এবং ফাইলটি মুছে ফেলা হতে পারে বলে মনে হচ্ছে না। আমি এটি তৈরির জন্য কী করেছি তা নিশ্চিত নই, তবে একটি এক্সএমএল ফাইল অনুলিপি করার চেষ্টা করার সময় এটি ঘটেছিল।

ফাইলের কিছু তথ্য নিম্নরূপ;

> ls -lb
total 296
-rw-r--r--   1 voyager  endeavor  137627 Jan 12 12:49 \177

> file *
:               XML document

> ls -i
 417777   

আমি ইনাম সুইচটি ব্যবহার করার চেষ্টা করেছি এবং তারপরে এটি পাইপ করেছিলাম যে এটি থেকে মুক্তি পাওয়ার সবচেয়ে বুদ্ধিমান উপায় বলে মনে হয়েছিল। তবে নীচের সাথে সংযুক্ত থ্রেডের নীচে দেওয়া উদাহরণটি আমার পক্ষে ব্যর্থ। উদাহরণটি ছিল:

> find -inum 41777 -exec ls -al {} \;
find: illegal option -- i
find: [-H | -L] path-list predicate-list

তাই আমি নীচের মতো প্রথমে পাথের তালিকাটি ব্যবহার করার চেষ্টা করেছি, তবে এটি কোনওভাবেই কার্যকর হয়নি:

> find . -inum 41777 -exec ls -al {} \;

আমি মুদ্রণযোগ্য অক্ষর \ 177 কী বা আমি কীভাবে এটি একটি rmকমান্ডে দিতে পারি তা নিশ্চিত নই, তবে আমি সত্যিই নিশ্চিত করতে চাই যে এই ফাইলটি মোছার প্রয়াসে আমি অন্য কোনও ফাইল / ডিরেক্টরিকে জড়িয়ে দেব না।


1
\177ASCII DELচরিত্র।
কিথ থম্পসন

9

দুর্দান্ত পয়েন্ট মাইকেল। সে কারণেই সম্ভবত আমার আদেশটি কার্যকর হয় নি।
মিঃ মূস

@ কিথথম্পসন এটি নেতৃত্ব ছাড়াই অষ্টাল 0?
বিড়াল

1
@ কেট: এই প্রসঙ্গে, হ্যাঁ এটি স্ট্রিং এবং চরিত্রের অক্ষরের জন্য সি সিনট্যাক্স অনুসরণ করে।
কিথ থমসন 10

উত্তর:


46

ফাইলটির একটি নাম রয়েছে তবে এটি মুদ্রণযোগ্য অক্ষর দিয়ে তৈরি। আপনি যদি ksh93, bash, zsh, mksh বা FreeBSD sh ব্যবহার করেন তবে আপনি এটির মুদ্রণযোগ্য নাম উল্লেখ করে মুছে ফেলার চেষ্টা করতে পারেন। প্রথমে নামটি ঠিক আছে কিনা তা নিশ্চিত করুন: ls -ld $'\177' যদি এটি সঠিক ফাইলটি দেখায় তবে rm ব্যবহার করুন:rm $'\177'

আরেকটি (কিছুটা ঝুঁকিপূর্ণ) পদ্ধতির ব্যবহার হ'ল rm -i -- *। -I বিকল্পের সাহায্যে আরএম কোনও ফাইল অপসারণের আগে নিশ্চিতকরণ প্রয়োজন, যাতে আপনি রাখতে চান এমন সমস্ত ফাইল বাদ দিতে পারেন one

শুভকামনা!


1
আমি সন্দেহ করি যে rm -i *এই ক্ষেত্রে কাজ করবে না; নতুন লাইনের কারণে, শেলটি এমন *কিছুতে প্রসারিত হবে যা rmফাইলের নাম হিসাবে স্বীকৃতি দেয় না।
কিথ থম্পসন

6
@ কিথথম্পসন: শেলের গ্লোব সম্প্রসারণ আরও ব্যাখ্যার বিষয় নয়। প্রসারিত নামের মধ্যে একটি নতুন লাইন থাকবে না যদি না এটি থাকে।
ক্রিস্টোফার হামারস্ট্রিম

@ ক্রিস্টোফারহ্যামারস্ট্রিম: হুম। আমি কিছু পরীক্ষা-নিরীক্ষা করব এবং আরও মন্তব্য করব।
কিথ থম্পসন

@ ক্রিস্টোফারহ্যামার্সট্রিম: প্রসারিত নামে একটি নতুন লাইন রয়েছে কারণ ফাইলের নামটিতে নতুন লাইনের অক্ষর রয়েছে। কিন্তু মনে হচ্ছে আমি underestimated থাকেন bashএবং গনুহ rm। আমার সিস্টেম অন, rm *, rm -i *, এবং rm Ctrl-V DEL TAB ENTERসব কাজ সঠিকভাবে ফাইলের নাম একটি newline অক্ষর (আমি ব্যবহার রয়েছে এমনকি যদি "\177foo\nbar\n")। কিছু কমান্ড এই ধরণের ফাইলের নামগুলি ভালভাবে পরিচালনা করে না তবে GNU সরঞ্জামগুলি শক্তিশালী বলে মনে হয়; একই সরঞ্জামগুলির নন-জিএনইউ সংস্করণগুলি পাশাপাশি আচরণ করতে পারে না। যাই হোক না কেন, এই উত্তরগুলির বিভিন্ন কৌশলগুলি জানতে দরকারী।
কিথ থম্পসন

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

23

যারা vimএটি ব্যবহার করেন তাদের বর্তমান কার্যকারী ডিরেক্টরিতে চালান:

$ vim ./ 

এবং তীরচিহ্নগুলি বা দিয়ে ফাইলটিতে নেভিগেট করুন j/k। তারপরে হিট করুন Shift+Dএবং মুছে ফেলার বিষয়টি নিশ্চিত করুন y


আমি সাধারণত
ভিমকে

9

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

  1. এতে ফোল্ডারটি খুলুন emacs। আপনি চালাতে পারেন emacs /path/to/folder, বা ইমাকগুলি খুলতে পারবেন , হিট Esc+ করুন xএবং চালাতে পারবেন diredযা পথটির জন্য প্রম্পট করবে

    http://so.mrozekma.com/unix-dired-delete1.png

  2. আপনি যে ফাইলটি মুছতে এবং টিপতে চান তাতে সারিটিতে যান dDআপনার ফাইলের পাশের বাম মার্জিনে একটি দেখতে হবে:

    http://so.mrozekma.com/unix-dired-delete2.png

  3. xআপনার পরিবর্তনগুলি সংরক্ষণ করতে টিপুন । আপনি ফাইলটি মুছতে চান তা নিশ্চিত করার জন্য অনুরোধ করা হবে; টিপুন y:

    http://so.mrozekma.com/unix-dired-delete3.png


1
দুর্দান্ত ধারণা বলে মনে হচ্ছে তবে আমি এই মেশিনে ইমাস খুঁজে পাচ্ছি না। একটি পবিত্র যুদ্ধ শুরু করার ঝুঁকিতে ... এটি কি উইম করে করা যেতে পারে?
মিঃ

2
যারা vimএটি ব্যবহার করেন তাদের বর্তমান কার্যক্ষম ডিরেক্টরিতে চালান: vim ./এবং তীর কীগুলির সাহায্যে ফাইলটিতে নেভিগেট করুন। তারপরে হিট করুন Shift+Dএবং মুছে ফেলার বিষয়টি নিশ্চিত করুন y

পছন্দ করুন এমন কিছু নয় যা আমি vimসমর্থন করব বলে আশা করি
মাইকেল মরোজেক

1
@ মিশেলমরোজেক সম্মত হয়েছেন, এর মধ্যে এই সমস্ত বৈশিষ্ট্য রয়েছে যা আমি মাঝেমধ্যে আবিষ্কার করতে চাই।

1
নিয়ান মোড @Kevin: nyan-mode.buildsomethingamazing.com
টিম

8

আপনি ইতিমধ্যে প্রদর্শন করেছেন file *যে শেল গ্লোব ( *) এই ফাইলটি তুলতে সক্ষম, তাই এখন কেবল rmসেই গ্লোবটি ব্যবহার করুন।

  • ফাইলটি যে ডিরেক্টরিতে রয়েছে সেটিতে পরিবর্তন করুন।
  • চালান rm -i *
  • nআপাতদৃষ্টিতে অদৃশ্য ফাইলটির নাম বাদে সমস্ত ফাইল সন্নিবেশ করান

7

ফাইলটির আসলে একটি নাম রয়েছে তবে এটি প্রিন্টযোগ্য অক্ষর দ্বারা তৈরি।

শেল সমাপ্তির উপর নির্ভর করা একটি সহজ পদ্ধতি: Tab"অদ্ভুত" ফাইলের নাম প্রবেশ না করা পর্যন্ত বারবার টিপুন । আপনার নিজের শেলটি অবশ্যই সম্পূর্ণ পরিপূর্ণতার মধ্যে চক্রটিতে কনফিগার করা উচিত:

  • ব্যাশে, আপনাকে অনুরোধ করা উচিত menu-complete, যা ডিফল্টরূপে completeআবদ্ধ না Tabহয়ে ডিফল্ট দ্বারা আবদ্ধ হয় । বিকল্পভাবে, Esc *সমস্ত ফাইলের জন্য পরিপূর্ণতা সন্নিবেশ করানোর জন্য ব্যবহার করুন এবং কমান্ড লাইন থেকে আপনি মুছতে চান না সেগুলি সরিয়ে ফেলুন।
  • Zsh এ, ডিফল্ট সেটিংস ঠিক আছে; আপনার দরকার আছে setopt auto_menuবা setopt menu_completeসেট করতে হবে।

যদি সম্পন্নতা আপনার শেলটিতে সহায়ক না হয় তবে আপনি rm -i -- *এই নির্দিষ্ট ফাইলটি বাদ দিয়ে কল করতে এবং "না" উত্তর দিতে পারেন । যদি ফাইলটির নাম মুদ্রণযোগ্য অক্ষর দিয়ে শুরু না হয়, আপনি সেই ফাইলগুলিতে ম্যাচগুলিকে সীমাবদ্ধ করতে পারেন যার প্রথম অক্ষর মুদ্রণযোগ্য অক্ষরের সেটগুলিতে নেই:

rm -i [!!-~]*
rm -i [![:print:]]*
rm -i -- [!a-z]

(সাবধান যদি আপনার প্যাটার্ন নামক কোনো ফাইল মেলে পারে -f, যা rmএকটি বিকল্প হিসেবে বিবেচনা করা হবে।)

অন্য পদ্ধতিটি হ'ল ls -iফাইলটির ইনোড (একটি ইনোড একটি প্রদত্ত ফাইল সিস্টেমের মধ্যে একটি ফাইলকে স্বতন্ত্রভাবে চিহ্নিত করে), তারপরে find -inumparticular নির্দিষ্ট ফাইলটিতে অপারেট করতে call এই ডিরেক্টরিটি বেশিরভাগ ক্ষেত্রে কার্যকর যখন ডিরেক্টরিতে প্রচুর পরিমাণে ফাইল থাকে।

ls -i
# note the inode number 12345
find . -xdev -inum 12345 -delete

আপনার যদি বিকল্প findনা থাকে -delete, কল করুন rm:

find . -xdev -inum 12345 -exec rm -- {} \;

(হ্যাঁ, আমি জানি যে এর বেশিরভাগই ইতিমধ্যে পোস্ট করা হয়েছে But তবে প্রাসঙ্গিক তথ্য সহ উত্তরগুলি এটি হওয়া উচিতের চেয়ে জটিল করে তুলছে))


4

echo -eচরিত্রটি পেতে চেষ্টা করুন \177, তারপরে xargsএটি পাস করার জন্য rmechoদশমিক পালানো লাগে না, তাই হেক্সে রূপান্তর করুন: দেখা যাচ্ছে 177অকটাল; echoএর আগে একটি \0(আক্ষরিক, নাল বাইট নয়) প্রয়োজন:

echo -ne '\0177\0' | xargs -0 rm

আপনি কি বলছেন যে \ xb1 \ 0 হেক্সের উপস্থাপনা \ 177?
মিঃ

@ মিঃমূজ \xb1দশমিক 177, \0এটিকে নাল-টার্মিনেট করে এবং নিউলাইন-টার্মিনেটেড নামের পরিবর্তে নাল-টার্মিনেটেড নাম নিতে -0বলে xargs
কেভিন

আমি সুনোস-এ ব্যাশ ব্যবহার করছি এবং যখন আমি আপনার আদেশটি চেষ্টা করেছি, তখন আমি xargs পেয়েছি: অবৈধ বিকল্প - ০. আমি ম্যান পৃষ্ঠার দিকে চেয়েছিলাম এবং নাল সমাপ্তির বিকল্প দেখতে পেলাম না। আমি যদিও এখনই সমস্যার সমাধান করতে পেরেছি। উত্তর হিসাবে চিহ্নিত প্রতিক্রিয়া দেখুন।
মিঃ

আপনার echoযেমনটি রয়েছে, xargs এ 2 ফাইলের নাম প্রেরণ করে এবং তারপরে rm... দ্বিতীয় ফাইলের নামটি হল \n.. এটির ফলে কোনও ত্রুটি হয়, বা সেই নামের একটি ফাইল মুছে ফেলা হয় ('\ n')
পিটার। ও

@ পেয়ার হ্যাঁ, আমি এটি কেবল লক্ষ্য করেছি। আমি -nনতুন লাইনটি থেকে মুক্তি পেতে যোগ করেছি ।
কেভিন

3

আমি শুধু সম্পর্কে আপনাকে নিশ্চিত করতে পারে না যে ফাইল আছে একটি নাম আছে। এটি কেবল এমন একটি নাম হতে পারে যাতে মুদ্রণযোগ্য অক্ষর থাকে।

যদি rmকাজ না করে, তাহলে আউটপুট ব্যবহার findসঙ্গে -inumএকটি আর্গুমেন্ট হিসাবে বিকল্পে rmসাহায্যের সম্ভাবনা নয়; এটি ঠিক rmএকই সমস্যাটি নিয়ে একই যুক্তি দিয়ে যাচ্ছে ।

এই ডিরেক্টরিতে ফাইলটি একমাত্র, তাই না?

প্রথম জিনিসটি আমি চেষ্টা করেছিলাম cdডিরেক্টরিটি লিখুন rm ./, তারপরে টাইপ করুন , তারপরে ট্যাব কীটি চাপুন। এটি যুক্তিটি ফাইলের প্রকৃত নামের সাথে প্রসারিত করা উচিত এবং পূর্ববর্তীটি যুক্তিটিকে ফাইলের নাম বাদে অন্য কিছু হিসাবে ব্যাখ্যা করা থেকে ./বিরত rmথাকতে হবে।

আরেকটি সমাধান হ'ল cdপিতামাতার ডিরেক্টরিতে, তারপরে ডিরেক্টরিতে rm -r(বা প্রয়োজনে rm -rf) ব্যবহার করুন। নাম নির্বিশেষে ডিরেক্টরি এবং এর সমস্ত সামগ্রী মুছে ফেলা উচিত। এরপরে আপনি mkdirডিরেক্টরিটি পুনরায় তৈরি করতে (এবং সম্ভবত chmodএর অনুমতিগুলি পুনরুদ্ধার করতে) ব্যবহার করতে পারেন ।

সম্পাদনা:

আপনার ls -lbআউটপুটটি আবার দেখে, আমি মনে করি যে ফাইলটির নাম একটি এসসিআইআই DELঅক্ষর দিয়ে শুরু হয় (যা মারাত্মক নয় খারাপ) এবং এতে এক বা একাধিক নতুন লাইন অক্ষর রয়েছে (যা সত্যই খারাপ)। আমি যতদূর বলতে পারি, rmকমান্ডটি কোনও ফাইলের নামের অংশ হিসাবে একটি নতুন লাইনের ব্যাখ্যা করতে পারে না।

কিন্তু unlink()সিস্টেম কল করতে পারেন। এখানে একটি পার্ল স্ক্রিপ্ট আমি একসাথে ছুঁড়েছি যা বর্তমান ডিরেক্টরিতে থাকা ফাইলগুলির মধ্য দিয়ে পুনরাবৃত্তি হবে এবং আপনি এটি অপসারণ করতে চান কিনা তার জন্য প্রত্যেককে আপনাকে জিজ্ঞাসা করব। এটি rmফাইলগুলি সরাতে যেমন কোনও বাহ্যিক কমান্ড ব্যবহার করে না , সুতরাং ফাইল সিস্টেম সমর্থন করে এমন কোনও মজার অক্ষরগুলি হ্যান্ডেল করতে সক্ষম হওয়া উচিত (এএসসিআইআই NULএবং অন্যান্য কিছু /)।

এরকম rm -rবা rm -rfধারণকারী ডিরেক্টরির এখনও কাজ করা উচিত, কিন্তু আপনার এই চেষ্টা করতে পারেন যদি আপনি কেবলমাত্র একটি ফাইল সরাতে চাই।

#!/usr/bin/perl

use strict;
use warnings;

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

foreach my $file (@files) {
    my $pfile = printable($file);
    print "Remove $pfile? ";
    my $answer = scalar <STDIN>;
    if ($answer =~ /^[Yy]/) {
        print "Removing $pfile\n";
        unlink $file or warn "Unable to remove $pfile: $!\n";
    }
}

sub printable {
    my($s) = @_;
    $s =~ s/[^ -~]/?/g;
    return $s;
}

(আর একটি সমাধান, যদি আপনি যে ডিরেক্টরিতে রাখতে চান সেই ডিরেক্টরিতে অন্য ফাইলগুলি থাকে, তবে অন্য সমস্ত ফাইলকে একটি অস্থায়ী ডিরেক্টরিতে স্থানান্তর করা হবে, তারপরে ডিরেক্টরিটি পুনরায় তৈরি করুন এবং অন্যান্য ফাইলগুলি আবার সরিয়ে ফেলুন))

(ওহ, এবং আপনি যে ফাইলটি তৈরি করতে যা কিছু করেছেন তা আবার না করার চেষ্টা করুন!)


1

আপনি যদি কমান্ডটি ব্যবহার করে ঠিক সেই ফাইলটি খুঁজে পেতে পারেন find, তবে আপনি -deleteপ্রিকেট ব্যবহার করতে পারেন । কেবল সতর্কতা অবলম্বন করুন, এবং -deleteফাইন্ড কমান্ডের একটি সর্বশেষ প্যারামিটার তৈরি করুন বা এটি অনেক ক্ষতি করবে ...


1

আপনি কাছাকাছি। ধাপে ধাপে, কীভাবে ইনোড নম্বর দিয়ে ফাইলটি মুছবেন তা এখানে।

প্রথমে আপনি যে ফাইলটি চান সেটি ব্যবহার করে ইনোড নম্বরটি সন্ধান করুন ls -li। ইনোড নম্বর আউটপুট প্রথম কলামে হবে।

উদাহরণ স্বরূপ:

$ls -li
311010 -rw-rw-r-- 1 me me 3995 Apr  6 16:27 -???\# ;-)

এই ক্ষেত্রে, ইনোড সংখ্যাটি 311010

findইনোড নম্বর দিয়ে ফাইলটি সন্ধান করতে ব্যবহার করুন ।

find . -inum 311010 

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

$find . -inum 311010
./-???\# ;-)

একবার আপনি নিশ্চিত হয়ে উঠলেন যে findএটি সঠিক ফাইলটি সন্ধান করছে, তারপরে -deleteপ্যারামিটারটি পাস করুন find। এটি আপনার জন্য ফাইলটি মুছে ফেলবে।

find . -inum 311010 -delete

0

অন্যান্য উত্তরগুলি দুর্দান্ত এবং প্রায় সমস্ত পরিবেশে কাজ করবে।

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

আপনি যদি কোনও নিয়মিত ইম্যাকস বা ভিএম ব্যবহারকারী না হন (অন্য কয়েকটি উত্তরে বর্ণিত), তবে এটি যাওয়ার সহজ উপায় হতে পারে।


0

"\ 033" নামক একটি ফাইল (আসল "এস্কেপ" চরিত্র) এর সাথে একই সমস্যা ছিল।

for x in $( ls | awk '!/^[A-Z]/ && !/^[a-z]/ && !/^[0-9]/');do rm -i -- $x ; done

উপরেরগুলি আপনাকে বর্তমান ডিরেক্টরিতে ফাইলগুলি সরাতে অনুরোধ করবে যা কোনও চিঠি বা নম্বর দিয়ে শুরু হয় না।


0

পরিবর্তে, আপনি বর্তমান ডিরেক্টরিটির নাম পরিবর্তন করতে পারেন DirX_OLD, নামের সাথে একটি নতুন ডিরেক্টরি তৈরি করতে DirXএবং প্রয়োজনীয় ফাইলগুলি থেকে সরিয়ে নিতে DirX_OLDপারেন DirX। ফাইলগুলি অনুলিপি করার পরে আপনি মুছতে পারেনDirX_OLD


0

কেবল যদি এটি কাউকে সহায়তা করে আমি আমার দুটি সেন্ট মূল্য যুক্ত করব। আমি statওয়াইল্ডকার্ডে এভাবে ব্যবহার করে ফাইলের নাম (গুলি) পেতে সক্ষম হয়েছি :

stat -c %N *

আউটপুট:

`\220g\201\acontexts'
`\220g\201\alogins'
`\220g\201\amodules'
`\220g\201\apolicy'
`\220g\201\asetrans.conf'

তারপরে আমি ফাইলগুলি অ্যাক্সেস করতে এএনএসআই সি-উদ্ধৃত স্ট্রিংগুলি (স্বীকৃত উত্তরে ব্যবহৃত হিসাবে) ব্যবহার করতে পারি:

rm $'\220g\201\asetrans.conf'

0

প্রতিটি ফাইলের একটি নাম রয়েছে, আপনাকে ঠিক কোনটি খুঁজে বের করতে হবে।

আমি উদাহরণ হিসাবে এই ফাইলগুলি ব্যবহার করব:

$ touch $'\177' $'\001\002' $'\033\027' a b abc $'a\177b'

এই ফাইলগুলি ?স্বাভাবিকের মতো প্রদর্শিত হবে ls:

$ ls
??  ?  ?002  a  abc  b

তবে যদি আপনার বিকল্পটির lsঅনুমতি দেয় তবে -Qএটি আসল ফাইলের নামটি পরিষ্কার হওয়া উচিত:

$ ls -1iQ *
26739122 "\001\002"
26739117 "\033\027"
26739115 "\177"
26739118 "a"
26739121 "a\177b"
26739120 "abc"
26739119 "b"

সেগুলি পিডাব্লুডিতে 1ফাইলগুলির কলামে ইনোড নম্বর এবং "উদ্ধৃত" নাম ।

এটি প্রসারণ (গ্লোব্বিং) ব্যবহার করতে একটি (পসিক্স) শেলের হাবিলতা ব্যবহার করছে:

কোনও মুদ্রণবিহীন অক্ষরের সাথে নামগুলি রাখার জন্য:

$ ls -1iQ *[![:print:]]*
26739122 "\001\002"
26739117 "\033\027"
26739115 "\177"
26739121 "a\177b"

এবং কেবলমাত্র মুদ্রনবিহীন অক্ষর থাকতে পারে এমন ফাইলগুলির তালিকা করতে :

$ ls -1iQ [![:print:]]*
26739122 "\001\002"
26739117 "\033\027"
26739115 "\177"

তারপরে, নির্বাচিতভাবে ( -i(ইন্টারেক্টিভ) বিকল্পটি) তাদের ব্যবহারগুলি সরান:

$ rm -i [![:print:]]*
rm: remove regular file ''$'\001\002'? n
rm: remove regular file ''$'\033\027'? n
rm: remove regular file ''$'\177'? n

yউপরের প্রশ্নের উত্তর দিয়ে কোনটি মুছে ফেলতে হবে তা আপনাকে কেবল চয়ন করতে হবে।


0

আপনার যদি স্বতঃপূরণ নিয়ে বাশ থাকে তবে এটি আপনার পক্ষে কাজ করতে পারে। ডিরেক্টরি তালিকাতে প্রদর্শিত অক্ষরটি টাইপ করেছি। তারপরে আমি স্ব-সম্পূর্ণকে ট্রিগার করেছিলাম এবং জিনিসটিকে মুদ্রণযোগ্য কিছুতে নামকরণ করেছি।

আমার জন্য যা কাজ করেছে তা এখানে:

$ ll
-rw-r--r--.  1 xxxxxxxx  xxxxx 25608 Oct 11 11:11 ?
$ mv ?  
(hit the [tab] and it gets extended to ...)
$ mv ^[
(now complete the command and rename to something printable)
$ mv ^[ weirdchar
$ ll
-rw-r--r--.  1 xxxxxxxx  xxxxx 25608 Oct 11 11:11 weirdchar
(now delete)
$ rm weirdchar

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