কোনও ডিরেক্টরি বাদে ডিরেক্টরিতে সমস্ত ফাইল মুছবেন কীভাবে?


123

আমাকে একটি ডিরেক্টরিতে সমস্ত ফাইল মুছতে হবে তবে সেগুলির কয়েকটি বাদ দিতে হবে। উদাহরণস্বরূপ, ফাইলগুলির সাথে একটি ডিরেক্টরিতে a b c ... zআমাকে ছাড়া uএবং সমস্ত মুছতে হবে p। এটি করার কোনও সহজ উপায় আছে?


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

1
আপনার কাছে মুছে ফেলতে চান লুকানো ফাইল চালানোর shopt -s dotglobচালানোর আগে rm (...)

উত্তর:


108

এই ক্ষেত্রে আমি যা করি তা টাইপ করা

rm *

তারপর আমি চাপুন Ctrl+ + X, *করতে প্রসারিত * সবকটি দৃশ্যমান ফাইলের নাম মধ্যে।

তারপরে আমি তালিকা থেকে রাখা দুটি ফাইল সরিয়ে ফেলতে পারি এবং শেষ পর্যন্ত কমান্ড লাইনটি কার্যকর করতে পারি।


25
আমি অনুমান করি যে এটি কেবল ততক্ষণ কাজ করবে যতক্ষণ ফাইলগুলির তালিকা *খুব বেশি প্রসারিত হয় না। : -}
ফ্রিরিচ রাবাব

9
এসসি এর পরে * "*" প্রসারিত হবে।
ধীরে ধীরে

2
@ সন্তোষকুমার: এটি আমার কাছে বোধগম্য নয়। সম্প্রসারণ সবসময় কাজ করবে, আপনি পরে কোন আদেশটি ব্যবহার করতে চান তা নির্ভর করে না।
ডের হচস্টাপলার

2
@ অলিভারসালজবার্গ দুঃখিত, সংমিশ্রণটি কিছুটা বিভ্রান্তিকর। আমি মনে করি আপনার মত লিখতে হবে Ctrl+ + Shift+ + x+ +*
সন্তোষ কুমার

2
@ সন্তোষকুমার: তবে এটি সমন্বয় নয়।
ডের হচস্টাপলার

143

করার rmসব কিন্তু u,pব্যাশ মাত্র টাইপ করুন:

rm !(u|p)

এটির জন্য নিম্নলিখিত বিকল্পগুলি সেট করা দরকার:

shopt -s extglob

আরও দেখুন: গ্লোব - গ্রেগের উইকি


1
আপনার অবশ্যই 'এক্সট্লগব্বিং' সক্রিয় থাকতে হবে: শপট
এক্স

18
আপনার দরকার shopt -s extglob, অটআউট। এছাড়াও, এটি কেবল ফাইলগুলি নয় ডিরেক্টরিগুলি নয়, এজন্যই আমি -rfআপনার কমান্ডের অপশনগুলি সরিয়েছি ।
slhck

3
আপনি একটি ফাইল বাদ দেওয়ার প্রয়োজন একটি নির্বাচনের ফাইল, এই চেষ্টা করে দেখুন: rm !(index).html। এটি "index.html" ব্যতীত ".html" এ শেষ হওয়া সমস্ত ফাইল মুছে ফেলবে।
মজুথার

71

তুমি ব্যবহার করতে পার find

find . ! -name u ! -name p -maxdepth 1 -type f -delete
  • ! পরবর্তী অভিব্যক্তি অবহেলা করে
  • -name একটি ফাইলের নাম নির্দিষ্ট করে
  • -maxdepth 1কেবলমাত্র নির্দিষ্ট ডিরেক্টরিটি প্রক্রিয়াটি তৈরি করবে ( findডিফল্ট ট্র্যাভারস ডিরেক্টরি অনুসারে)
  • -type f কেবলমাত্র ফাইলগুলি প্রক্রিয়া করবে (এবং উদাহরণস্বরূপ নয়)
  • -delete ফাইলগুলি মুছে ফেলবে

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

হালনাগাদ

  • মনে রাখবেন যে এক্সপ্রেশনগুলির উপাদানগুলির ক্রমটি উল্লেখযোগ্য (ডকুমেন্টেশন দেখুন)
  • -printপরিবর্তে ব্যবহার করে প্রথমে আপনার কমান্ড পরীক্ষা করুন-delete

    find . ! -name u ! -name p -maxdepth 1 -type f -print

5
পূর্বাভাসের ক্রমটি এখানে গুরুত্বপূর্ণ। যদি একে -deleteঠিকঠাক করা হয় .তবে তা দুর্যোগ হবে (
সিডাব্লুডিতে

এটি আরও find . -maxdepth 1 -type f -name '[^up]' -delete
নিবিড়ভাবে

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

2
findআমার সেরা বন্ধু, বিশেষত যখন গ্লোব করার জন্য খুব বেশি ফাইল রয়েছে
টেরেন্স জনসন

43

সরল:

mvআপনি যে ফাইলগুলি একটি উচ্চ ডিরেক্টরিতে চান rmতা ডিরেক্টরিতে এবং ডিরেক্টরিগুলি mvআবার ফিরে।


13
অফকোর্স, তাদের উচ্চতর ডিরেক্টরিতে এমভি করুন। আপনি মুছে
ফেলছেন

@ کونারাক: rmছাড়াই উপ- -rডিরেক্টরিগুলি সরানো হবে না।
রিইনারপোস্ট

11
এটি গন্তব্য ডিরেক্টরিতে একই নামের ফাইলগুলি ওভাররাইট করবে
মাত্তিও

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

15

এই উত্তরের সাথে কিছুটা অনুরূপ তবে কোনও বিশেষ বিকল্পের প্রয়োজন নেই, যতদূর আমি জানি যে নীচে "প্রাচীন" কার্যকারিতাটি কোনও (অস্পষ্ট) / বিন / শ সদৃশ শেল দ্বারা সমর্থিত (যেমন বাশ, জেডএস, কেএস, ইত্যাদি)

rm [^up]

2
এটি 1-চর ফাইলের নামের জন্য কাজ করে। দীর্ঘ নামগুলির জন্য, স্পার্কির উত্তর আরও ভাল।
গ্লেন জ্যাকম্যান

3
এতে কী ভুল হবে rm [^up]*? আমি প্রায়ই একই জিনিস না।
একটি সিভিএন

3
@ মাইকেলKjörling - এটি কেবল আপনার এবং পি নাম নয়, কেবল আপনার বা পি দিয়ে শুরু হওয়া সমস্ত ফাইল মুছবে। আমি মনে করি ওপি (@আউট) এর অর্থ অজ এবং ইউ, পি ইত্যাদি। প্রতীকী এবং আক্ষরিক নয়।
সুদীপ্তা চ্যাটার্জী

4
@ হবিসোফক্যালভিন এইগুলি সমস্ত ফাইল মুছে ফেলবে যা আপনার বা পি দিয়ে শুরু হয় না, তাদের সাথে শুরু হওয়া ফাইলগুলি নয়
rjmunro

@ আরজমুনরো - ধন্যবাদ, মিস করেছেন! :)
সুদীপ্ত চ্যাটার্জী

11

খুঁজে না পেয়ে এটি করা:

ls | grep -v '(u|p)' | xargs rm

(সম্পাদনা করুন: "ইউ" এবং "ভি", এখানকার অন্যান্য জায়গাগুলির মতো, পুরো রেজেক্সের জেনেরিক সংস্করণ হিসাবে ব্যবহৃত হচ্ছে Ob স্পষ্টতই আপনি খুব বেশি জিনিস মেলাতে এড়াতে আপনার রেজেক্সদের নোঙ্গর দেওয়ার ক্ষেত্রে যত্নবান হতে চান))

আপনি অবশ্যই স্ক্রিপ্ট চাইবেন যদি আপনি আরও কিছু করতে যাচ্ছেন, যেমন অন্যরা পরামর্শ দিয়েছেন।


পারেন ব্যবহার করুন: grep ডিফল্টরূপে regexpt বাড়ানো হবে পরিচালনা -Eবাegrep
Matteo

2
এটি কোনও uবা একটিযুক্ত কোনও ফাইল বাদ দেবেp
ম্যাটটিও

@ মাত্তিও এটি করবে না গ্রেপ ফাইলগুলি গ্রেপ করছে না, এটি ls কমান্ডের আউটপুটটিকে গ্রেপ করছে। আপনি এমন কিছু ভাবছেন grep -L (u|p)' * | xargs rmযেখানে -Lতালিকার ফাইলের নামগুলি কোনও মিল নেই।
rjmunro

4
ওহ, তুমি কে নাম ধারণ করে যেকোনো ফাইল মানে uবা pকোনো একটি ফাইল, না uবা p। ঐটা ঠিক. আপনি ব্যবহার করে ঠিক করতে পারেনegrep -v '^(u|p)$'
rjmunro

1
এই ম্যাচগুলি বাদ দিয়ে এখানে সবকিছু মুছে ফেলা হচ্ছে! ls | grep -v 'vuze\|progs' | xargs rm -rf
নিক

6

জেডএসে:

setopt extended_glob  # probably in your .zshrc

তারপর

rm ^(u|p)

অথবা

rm *~(u|p)

যদি আপনি দ্বিতীয় এমনকি কাজ করবে ^মধ্যে $histcharsইতিহাস প্রতিকল্পন জন্য, এবং অবশ্যই আপনি আগে একটি অবাধ উল্লিখিত glob লাগাতে পারেন ~


5

গ্লোবিগনোর একটি কোলন-বিচ্ছিন্ন তালিকা নিয়েছে

GLOBIGNORE=u:p
rm *

12
এটি আমার শেল (জিএনইউ বাশ 4.1.5 (1)) এ কাজ করে না। টেস্টিং ডিরেক্টরি থেকেrm বা এর চেয়ে কম ক্ষতিকারক কিছু দিয়ে প্রথমে এটি পরীক্ষা করে দেখুন !
একটি সিভিএন

3

ফ্লপি যুগে ফিরে এসে আমার কাছে একটি ডস এক্সিকিউটেবল "ব্যতীত" ছিল যা বর্তমান ডিরেক্টরি থেকে সাময়িকভাবে জিনিসগুলি সরিয়ে নিয়ে যায় এবং একটি আদেশ চালায়, তাই আপনি বলতে পারেন:

* .txt ডেল *। * বাদে

আপনার পাঠ্য ফাইলগুলি ছাড়াও সমস্ত কিছু মুছতে।

এটি শেল স্ক্রিপ্ট হিসাবে বাস্তবায়নের জন্য একটি খুব তুচ্ছ জিনিস হতে পারে এবং যদি এই ধরণের জিনিসটি আপনি দ্বিগুণেরও বেশি বেশি করে করতে পারেন তবে মনে হয় এটি ভাল ধারণা হবে।


2
এটি আমাকে একই জিনিস মনে করিয়ে দিয়েছে। কিন্তু অস্থায়ীভাবে ফোল্ডারের বাইরে চলে যাওয়া মাল্টিটাস্কিংয়ের যুগে ভাল ধারণা নাও থাকতে পারে :)
সেদাত কাপানোগলু

3
 find . -maxdepth 1 ! -name "u" ! -name "p" -type f -exec rm -rf {} \;

এটি ইউনিক্সে ইউ এবং পি ব্যতীত সমস্ত ফাইল মুছবে


2

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

find -regextype posix-awk ! -regex './(u|p)' -print0 | xargs -0 rm -rf

আপনাকে এক্সপ্রেশনটির আগে একটি ডিরেক্টরি নির্দিষ্ট করতে হবে (`সন্ধান করুন।
মাত্তেও

-regextypeশুধুমাত্র জিএনইউ সংস্করণগুলিতে কাজ করবে
মাত্তিও

না - আমার সন্ধানের সংস্করণটি (ডেবিয়ান স্কুজে) স্পষ্টভাবে স্পষ্ট ডিরেক্টরি প্রয়োজন হয় না যদি বর্তমান ডিরেক্টরিটি ব্যবহার করা উচিত
স্পার্কি

@ স্পার্ক: এটি কেবল জিএনইউ বাস্তবায়নে কাজ করে
মাত্তিও

@ স্পার্কি: ডিরেক্টরিটি নির্ধারণ না করা (প্রথম প্যারামিটার) findহ'ল findকমান্ডের GNU এক্সটেনশন । একই -regextypeবিকল্পের জন্য প্রযোজ্য । এছাড়াও, আপনার কমান্ড সাব ডাইরেক্টরিগুলিতে ফাইলগুলিও মুছে ফেলবে, যেখানে একটি ডিরেক্টরিতে ফাইল সম্পর্কে মূল প্রশ্নটি স্পষ্টভাবে জিজ্ঞাসা করা হয়েছে।
মিক্কো রেন্টালাইনেন

1

আমি সবসময় ব্যবহার:

rm [a-o,q-t,v-z]*

এটি আপনাকে কী পরিমাণ দানা তৈরি করতে চান তা নির্ধারণ করার অনুমতি দেবে। সুতরাং আপনি যদি ও ও জেড ফাইলগুলির মাধ্যমে মুছতে চান তবে আপনি ব্যবহার করতে পারেন:

rm [a-o,z]*

1

তবুও অন্য সংস্করণ ব্যবহার করে xargs:

ls -1 | grep -v do_not_delete | xargs -I files rm "files"

নোট করুন যে xargs -Iফাঁকা স্থান সহ ফাইলের নামগুলি সঠিকভাবে পরিচালনা করতে হবে।


1

আরেকটি:

for FILE in ./*; do if [[ $FILE != ./u* ]] || [[ $FILE != ./p* ]];then rm $FILE; fi; done;

এটি একপ্রকার দীর্ঘ এবং আমি জানি না যে আপনি সহজেই এমন কোনও ফাংশন তৈরি করতে পারেন যা সহজেই সংযোজন করতে পারে এবং নির্বিচারে সংখ্যক যুক্তি উপস্থাপন করতে পারে, তবে এটি ভালভাবে কাজ করে।

এবং এটি খাঁটি বাশ মঙ্গলভাব।


1

এখানে আরও একটি বৈকল্পিক। আপনি টাইপ করতে পারেন:

rm -i *

বা:

rm --interactive *

সুতরাং rmআপনাকে প্রতিটি ফাইল মোছার বিষয়টি নিশ্চিত করতে বলবে।


1

ব্যবহার করুন:

find . -type f ! -name 'u' ! -name 'p' ! -name '*.ext' -delete
find . -type d ! -name 'u' ! -name 'p' ! -name '*.ext' -delete

ডিরেক্টরি, ইউ, পি এবং .ext ফাইল ব্যতীত সমস্ত ফাইল মুছে ফেলার জন্য।


0

একটি সহজ উপায় যা জগাখিচুড়ি করা কঠিন: আসুন আমরা বলি যে আপনি * .pdf ব্যতীত সবকিছু মুছতে চান:

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