আমাকে একটি ডিরেক্টরিতে সমস্ত ফাইল মুছতে হবে তবে সেগুলির কয়েকটি বাদ দিতে হবে। উদাহরণস্বরূপ, ফাইলগুলির সাথে একটি ডিরেক্টরিতে a b c ... z
আমাকে ছাড়া u
এবং সমস্ত মুছতে হবে p
। এটি করার কোনও সহজ উপায় আছে?
আমাকে একটি ডিরেক্টরিতে সমস্ত ফাইল মুছতে হবে তবে সেগুলির কয়েকটি বাদ দিতে হবে। উদাহরণস্বরূপ, ফাইলগুলির সাথে একটি ডিরেক্টরিতে a b c ... z
আমাকে ছাড়া u
এবং সমস্ত মুছতে হবে p
। এটি করার কোনও সহজ উপায় আছে?
উত্তর:
এই ক্ষেত্রে আমি যা করি তা টাইপ করা
rm *
তারপর আমি চাপুন Ctrl+ + X, *করতে প্রসারিত *
সবকটি দৃশ্যমান ফাইলের নাম মধ্যে।
তারপরে আমি তালিকা থেকে রাখা দুটি ফাইল সরিয়ে ফেলতে পারি এবং শেষ পর্যন্ত কমান্ড লাইনটি কার্যকর করতে পারি।
*
খুব বেশি প্রসারিত হয় না। : -}
Ctrl
+ + Shift
+ + x
+ +*
করার rm
সব কিন্তু u,p
ব্যাশ মাত্র টাইপ করুন:
rm !(u|p)
এটির জন্য নিম্নলিখিত বিকল্পগুলি সেট করা দরকার:
shopt -s extglob
আরও দেখুন: গ্লোব - গ্রেগের উইকি
shopt -s extglob
, অটআউট। এছাড়াও, এটি কেবল ফাইলগুলি নয় ডিরেক্টরিগুলি নয়, এজন্যই আমি -rf
আপনার কমান্ডের অপশনগুলি সরিয়েছি ।
rm !(index).html
। এটি "index.html" ব্যতীত ".html" এ শেষ হওয়া সমস্ত ফাইল মুছে ফেলবে।
তুমি ব্যবহার করতে পার 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
-delete
ঠিকঠাক করা হয় .
তবে তা দুর্যোগ হবে (
find . -maxdepth 1 -type f -name '[^up]' -delete
find
আমার সেরা বন্ধু, বিশেষত যখন গ্লোব করার জন্য খুব বেশি ফাইল রয়েছে
সরল:
mv
আপনি যে ফাইলগুলি একটি উচ্চ ডিরেক্টরিতে চান rm
তা ডিরেক্টরিতে এবং ডিরেক্টরিগুলি mv
আবার ফিরে।
rm
ছাড়াই উপ- -r
ডিরেক্টরিগুলি সরানো হবে না।
এই উত্তরের সাথে কিছুটা অনুরূপ তবে কোনও বিশেষ বিকল্পের প্রয়োজন নেই, যতদূর আমি জানি যে নীচে "প্রাচীন" কার্যকারিতাটি কোনও (অস্পষ্ট) / বিন / শ সদৃশ শেল দ্বারা সমর্থিত (যেমন বাশ, জেডএস, কেএস, ইত্যাদি)
rm [^up]
rm [^up]*
? আমি প্রায়ই একই জিনিস না।
খুঁজে না পেয়ে এটি করা:
ls | grep -v '(u|p)' | xargs rm
(সম্পাদনা করুন: "ইউ" এবং "ভি", এখানকার অন্যান্য জায়গাগুলির মতো, পুরো রেজেক্সের জেনেরিক সংস্করণ হিসাবে ব্যবহৃত হচ্ছে Ob স্পষ্টতই আপনি খুব বেশি জিনিস মেলাতে এড়াতে আপনার রেজেক্সদের নোঙ্গর দেওয়ার ক্ষেত্রে যত্নবান হতে চান))
আপনি অবশ্যই স্ক্রিপ্ট চাইবেন যদি আপনি আরও কিছু করতে যাচ্ছেন, যেমন অন্যরা পরামর্শ দিয়েছেন।
-E
বাegrep
u
বা একটিযুক্ত কোনও ফাইল বাদ দেবেp
grep -L (u|p)' * | xargs rm
যেখানে -L
তালিকার ফাইলের নামগুলি কোনও মিল নেই।
u
বা p
কোনো একটি ফাইল, না u
বা p
। ঐটা ঠিক. আপনি ব্যবহার করে ঠিক করতে পারেনegrep -v '^(u|p)$'
ls | grep -v 'vuze\|progs' | xargs rm -rf
গ্লোবিগনোর একটি কোলন-বিচ্ছিন্ন তালিকা নিয়েছে
GLOBIGNORE=u:p
rm *
rm
বা এর চেয়ে কম ক্ষতিকারক কিছু দিয়ে প্রথমে এটি পরীক্ষা করে দেখুন !
ফ্লপি যুগে ফিরে এসে আমার কাছে একটি ডস এক্সিকিউটেবল "ব্যতীত" ছিল যা বর্তমান ডিরেক্টরি থেকে সাময়িকভাবে জিনিসগুলি সরিয়ে নিয়ে যায় এবং একটি আদেশ চালায়, তাই আপনি বলতে পারেন:
* .txt ডেল *। * বাদে
আপনার পাঠ্য ফাইলগুলি ছাড়াও সমস্ত কিছু মুছতে।
এটি শেল স্ক্রিপ্ট হিসাবে বাস্তবায়নের জন্য একটি খুব তুচ্ছ জিনিস হতে পারে এবং যদি এই ধরণের জিনিসটি আপনি দ্বিগুণেরও বেশি বেশি করে করতে পারেন তবে মনে হয় এটি ভাল ধারণা হবে।
find . -maxdepth 1 ! -name "u" ! -name "p" -type f -exec rm -rf {} \;
এটি ইউনিক্সে ইউ এবং পি ব্যতীত সমস্ত ফাইল মুছবে
যারা সম্পূর্ণরূপে প্রস্ফুটিত রেজএক্সপ্যাক ইম্যাক্স, পিক্সিক-অ্যাজক বা পিক্সিক্স-বর্ধিত শৈলীতে সালিসি জটিল ব্যতীত প্যাটার্নগুলি (সমস্ত প্রভাবিত ফাইলের নাম ছড়িয়ে দেওয়া) নির্দিষ্ট করতে পছন্দ করেন তাদের জন্য আমি এই পরামর্শটি দেব। এটি বাদ দেয় u
এবং p
বর্তমান দির এই উদাহরণে। এটি স্ক্রিপ্টগুলির জন্য কার্যকর হতে পারে।
find -regextype posix-awk ! -regex './(u|p)' -print0 | xargs -0 rm -rf
-regextype
শুধুমাত্র জিএনইউ সংস্করণগুলিতে কাজ করবে
find
হ'ল find
কমান্ডের GNU এক্সটেনশন । একই -regextype
বিকল্পের জন্য প্রযোজ্য । এছাড়াও, আপনার কমান্ড সাব ডাইরেক্টরিগুলিতে ফাইলগুলিও মুছে ফেলবে, যেখানে একটি ডিরেক্টরিতে ফাইল সম্পর্কে মূল প্রশ্নটি স্পষ্টভাবে জিজ্ঞাসা করা হয়েছে।
আরেকটি:
for FILE in ./*; do if [[ $FILE != ./u* ]] || [[ $FILE != ./p* ]];then rm $FILE; fi; done;
এটি একপ্রকার দীর্ঘ এবং আমি জানি না যে আপনি সহজেই এমন কোনও ফাংশন তৈরি করতে পারেন যা সহজেই সংযোজন করতে পারে এবং নির্বিচারে সংখ্যক যুক্তি উপস্থাপন করতে পারে, তবে এটি ভালভাবে কাজ করে।
এবং এটি খাঁটি বাশ মঙ্গলভাব।
এখানে আরও একটি বৈকল্পিক। আপনি টাইপ করতে পারেন:
rm -i *
বা:
rm --interactive *
সুতরাং rm
আপনাকে প্রতিটি ফাইল মোছার বিষয়টি নিশ্চিত করতে বলবে।
ব্যবহার করুন:
find . -type f ! -name 'u' ! -name 'p' ! -name '*.ext' -delete
find . -type d ! -name 'u' ! -name 'p' ! -name '*.ext' -delete
ডিরেক্টরি, ইউ, পি এবং .ext ফাইল ব্যতীত সমস্ত ফাইল মুছে ফেলার জন্য।
একটি সহজ উপায় যা জগাখিচুড়ি করা কঠিন: আসুন আমরা বলি যে আপনি * .pdf ব্যতীত সবকিছু মুছতে চান:
mkdir tmp
mv *.pdf tmp
rm *
mv tmp/* .
rm -r tmp