প্রশ্ন বর্তমান ডিরেক্টরির মধ্যে একটি নির্দিষ্ট এক্সটেনশন এর সব ফাইল আমি কিভাবে পুনরাবৃত্তি করতে পারি?


কিভাবে আমি একটি নির্দিষ্ট এক্সটেনশান (যেমন। .bak) বর্তমান ডিরেক্টরী এবং সমস্ত সাবফোল্ডার থেকে এক কমান্ড লাইন ব্যবহার করে? শুধু, আমি ব্যবহার করতে ভয় পাচ্ছি rm যেহেতু আমি একবার এটি ভুল ব্যবহার করেছি এবং এখন আমার পরামর্শ দরকার।


421
2017-11-15 13:03


উত্স




উত্তর:


আপনি এমনকি ব্যবহার করার প্রয়োজন হয় না rm এই ক্ষেত্রে যদি আপনি ভয় হয়। ব্যবহার find:

find . -name "*.bak" -type f -delete

কিন্তু সতর্কতা সঙ্গে এটি ব্যবহার করুন। প্রথম রান করুন:

find . -name "*.bak" -type f

আপনি দেখতে পাবেন ঠিক কোন ফাইল দেখতে।

এছাড়াও, নিশ্চিত করো যে -delete শেষ যুক্তি আপনার কমান্ড। যদি আপনি আগে এটি করা -name *.bak argument, এটা সব মুছে ফেলা হবে

দেখ man find এবং man rm আরো তথ্যের জন্য এবং SE সম্পর্কিত এই সম্পর্কিত প্রশ্নটি দেখুন:


660
2017-11-15 13:08



কিভাবে এই থেকে ভিন্ন rm *.bak? - sayantankhan
@ বল্ট 64 আপনার rm *.bak সাবডিরেক্টরির জন্য কাজ করবে না। - Radu Rădeanu
ডিফল্ট সেটিংস সঙ্গে rm *.bak বর্তমান ডিরেক্টরির মধ্যে .bak দিয়ে শেষ সমস্ত ফাইল মুছে ফেলবে। এছাড়াও আপনি গ্লবস সঙ্গে fiddle করতে প্রয়োজন subdirectories জিনিস করতে, -আর বিকল্প ব্যবহার করুন বা উদাহরণ খুঁজে ব্যবহার করুন। - Hennes
@ হেনস সাবধান থাকুন rm -r *.bak! এটি মধ্যে শেষ ডিরেক্টরি অপসারণ করে .bak তাদের সব কন্টেন্ট সঙ্গে। - Radu Rădeanu
নিশ্চিত করা যে -delete আপনার কমান্ড শেষ যুক্তি। যদি আপনি আগে এটি করা -name *.bak যুক্তি, এটা সব মুছে ফেলা হবে। - Michael


find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f

32
2018-04-04 19:10



প্রশ্নবন্তু স্বাগতম স্বাগতম! এটি একটি পুরোপুরি বৈধ উত্তর যদিও আমি এর পরিবর্তে এর ব্যবহারে কোন সুবিধা নেই -delete পতাকা find। আরো তথ্য পাওয়া যাবে খুঁজে সঙ্গে ফাইল মুছে ফেলার জন্য GNU ম্যানুয়াল এন্ট্রি। - Glutanimate
আপনি সম্ভবত সঠিক, এটি একটি বিকল্প সমাধান, সম্ভবত আরো কাঁচা;) - lokers
এটি কেবল একটি বিকল্প নয় বরং একটি উদাহরণ যা পাইপ '|' দিয়ে অন্য কমান্ডগুলিকে একত্রিত করতে পারে। +1 টি - Boris Pavlović
এই বিকল্প সমাধানগুলি অন্যান্য পরিবেশগুলিতে কাজ করে যা অভাবহীন (যেমন সিগুইন) - ciriarte
আমি এই এখানে সেরা উত্তর মনে হয়। - Léo Léopold Hertz 준영


প্রথম কমান্ড চালানো shopt -s globstar। আপনি কমান্ড লাইনে এটি চালাতে পারেন এবং এটি শুধুমাত্র শেল উইন্ডোতে কার্যকর হবে। আপনি এটা আপনার মধ্যে রাখতে পারেন .bashrc, এবং তারপর সব নতুন শুরু শেল এটা নিতে হবে। যে কমান্ড প্রভাব করতে হয় **/ বর্তমান ডিরেক্টরি এবং তার সাবডিরেক্টরিগুলিতে বারবার ফাইলগুলি মিলান (ডিফল্টরূপে, **/ একই জিনিস মানে */: শুধুমাত্র তাত্ক্ষণিক উপদেষ্টা)। তারপর:

rm **/*.bak

(অথবা gvfs-trash **/*.bak অথবা আপনি কি আছে)।


28
2017-11-15 18:59





ফাইল মুছে ফেলা আমার জন্য কিছু ব্যবহার করা উচিত নয় rm জন্য। এখানে একটি বিকল্প:

sudo apt-get install gvfs     # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash"    # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak                   # trash the files (thus moving them to the trash bin)

ফ্লিম মন্তব্য করে বলেছে:

প্যাকেজ trash-cli একই জিনিস না gvfs-trash GVFS উপর নির্ভরতা ছাড়া।

তাই:

sudo apt-get install trash-cli

আপনি এই জন্য একটি উপনাম করতে হবে না, কারণ trash-cli প্যাকেজ একটি কমান্ড প্রদান করে trashযা আমরা চাই।

Eliah Kagan ব্যাপক মন্তব্যে পরিষ্কার করে তোলে, আপনি এটি ব্যবহার করে এই recursive করতে পারেন find। যে ক্ষেত্রে আপনি একটি উপনাম ব্যবহার করতে পারবেন না, তাই নিম্নোক্ত কমান্ড অনুমান করা হয়েছে যে আপনি ইনস্টল করেছেন trash-cli। আমি ইলিয়াহের মন্তব্যকে সংক্ষিপ্ত করে তুলেছি:

এই কমান্ড খুঁজে এবং প্রদর্শন সব .bak বর্তমান ডিরেক্টরি বা তার সাবডিরেক্টরি বা নীচে যে কোন জায়গায় ফাইল এবং সিমলিঙ্কগুলি।

find . -name '*.bak' -xtype f

তাদের মুছে ফেলতে, একটি যোগ করুন -exec সঙ্গে trash কমান্ড প্রয়োগ করুন:

find . -name '*.bak' -xtype f -exec trash {} +

-xtype f ফাইল এবং সিমলিঙ্ক ফাইল, কিন্তু ফোল্ডার না নির্বাচন করুন। .Bak ফোল্ডার মুছে ফেলার জন্য, যে অংশটি মুছে ফেলুন এবং ব্যবহার করুন -execdir, যা এড়ানো cannot trash non-existent জন্য ত্রুটি .bak ভিতরে ফাইল .bak ডিরেক্টরি:

find . -name '*.bak' -execdir trash {} +

19
2017-11-15 13:52



"ব্যবহার করবেন না rm জিনিস মুছে ফেলার জন্য "একটি বিতর্কিত বক্তব্য কিন্তু আমার কাছে একমত হতে হবে যে এটি এমন কিছু ব্যবহার করা বিজ্ঞতার কাজ যা আপনাকে পূর্বাবস্থায় ফিরিয়ে আনতে দেয়। - Oli♦
প্যাকেজ trash-cli একই জিনিস না gvfs-trash উপর নির্ভরতা ছাড়া gvfs। - Flimm
আমি উত্তরটি সম্পাদনা করেছি, পরের বার নিজেকে সম্পাদনা করতে বিনা দ্বিধায়। - don.joey
@ ডনজোজি এই উত্তর বলে মনে হচ্ছে find . -name "*.bak" -type f কি প্রদর্শন করে trash *.bak মুছে ফেলা হবে। সত্যিই আপনি কি বলতে চাচ্ছেন? আপনি ডিরেক্টরি ট্র্যাশে স্থানান্তর করতে পারেন trash অথবা gvfs-trash, কিন্তু trash *.bak শুধুমাত্র নাম এবং ফাইল যার নাম শেষ হবে .bak এবং যে বর্তমান ডিরেক্টরি অবিলম্বে বসবাস। শেল বিস্তৃত *.bak, তাই trash *.bak প্রভাবিত হবে না .bak subdirectories মধ্যে ফাইল নিজেদের নামে না .bak। - Eliah Kagan
@ ডনজোজি হ্যাঁ ls *.bak (যা আমি আপনার মনে হয়) তালিকা কি trash *.bak ট্র্যাশগুলি। find . -name '*.bak' -xtype f -exec trash {} + সব trashes .bak ফাইল কোথাও অধীনে .। এটি একটি উপনাম ব্যবহার করতে পারবেন না, তাই ইনস্টল trash-cli অথবা লিখুন gvfs-trash পরিবর্তে. এখানে একটি উদাহরণ।  -xtype f ফাইল এবং সিমলিঙ্ক ফাইল, কিন্তু ফোল্ডার না নির্বাচন করুন। বাদ .bak  ফোল্ডার খুব, ব্যবহার find . -name '*.bak' -execdir trash {} +, যা এড়ানো cannot trash non existent জন্য ত্রুটি .bak ভিতরে ফাইল .bak ডিরেক্টরি। আপনার উত্তর এই ব্যবহার করতে বিনা দ্বিধায় দয়া করে। - Eliah Kagan


যদি আপনি একটি নির্দিষ্ট ধরনের সমস্ত ফাইল মুছে ফেলতে চান তবে বর্তমান ফোল্ডার থেকে শুধুমাত্র 1 ফোল্ডার "গভীর":

find . -maxdepth 2 -name "*.log" -type f -delete

- ম্যাক্সডপথ ২ কারণ বর্তমান ডিরেক্টরি ""প্রথম ফোল্ডার হিসাবে গণনা।


3
2017-11-26 17:21





আপনি যদি গিট রেপোর ভিতরে থাকেন তবে আপনি এটি ব্যবহার করতে পারেন:

git clean -fdx

এটি। Gitignore মধ্যে অট্যাকড ফাইল এবং ফাইল মুছে ফেলে।


0
2017-08-09 07:38