একটি নির্দিষ্ট নামের সাথে ফোল্ডারগুলি কীভাবে সরাবেন


139

লিনাক্সে, আমি কীভাবে একটি নির্দিষ্ট নাম সহ ফোল্ডারগুলি সরিয়ে ফেলব যা ফোল্ডার স্তরক্রমের গভীরে বাসা বাঁধে?

নিম্নলিখিত পাথগুলি একটি ফোল্ডারের অধীনে রয়েছে এবং আমি নামযুক্ত সমস্ত ফোল্ডার সরিয়ে দিতে চাই a

1/2/3/a
1/2/3/b
10/20/30/a
10/20/30/b
100/200/300/a
100/200/300/b

প্যারেন্ট ফোল্ডার থেকে আমার কোন লিনাক্স কমান্ড ব্যবহার করা উচিত?


সম্ভবত বিন্দুটি অনুপস্থিত তবে সম্ভবত এটি কাউকে সহায়তা করে: আমার একটি প্রধান ফোল্ডারে 410 ফোল্ডার রয়েছে - 410 টির মধ্যে দুটিতে দুটি সাব-ফোল্ডার রয়েছে। সমস্ত প্রথম সাব-ফোল্ডারগুলির নাম 'চূড়ান্ত' এবং এতে সম্পাদিত পিডিএফ এবং একটি ওয়ার্ড সামগ্রী তালিকা রয়েছে। টিফ_পিডিএফ_ভরিয়াস_নামের নাম অনুসারে সমস্ত দ্বিতীয় সাব-ফোল্ডারগুলিতে মূলত স্ক্যান করে রাখা টিফ ফাইলগুলি (কিছুটা 200 পৃষ্ঠার উপরে), তাদের সম্পাদনা করা পিডিএফ এবং একটি খসড়া .ডোক্স সামগ্রী তালিকা রয়েছে - এইভাবে একটি হোম ওয়ার্কের সংগ্রহ। 4TB এর কাছাকাছি টিফস সহ আমার কেবল 410 টি ফোল্ডার কেবল শেষ পর্যন্ত সম্পাদিত উপাদানযুক্ত সংগ্রহ করা দরকার। সবচেয়ে সহজ পদ্ধিতিটি ব্যবহার করা ছিল (মাইক্রো
জুরি

উত্তর:


155

যদি লক্ষ্য ডিরেক্টরিটি খালি থাকে তবে সন্ধান করুন, কেবলমাত্র ডিরেক্টরি দিয়ে ফিল্টার করুন, নাম অনুসারে ফিল্টার করুন, আরএমডিআইর কার্যকর করুন:

find . -type d -name a -exec rmdir {} \;

আপনি যদি এর সামগ্রীগুলি পুনরাবৃত্তভাবে মুছতে চান তবে এর -exec rmdir {} \;মাধ্যমে -deleteবা এর দ্বারা প্রতিস্থাপন করুন -prune -exec rm -rf {} \;। অন্যান্য উত্তরে এই সংস্করণগুলি সম্পর্কে বিশদ বিবরণ রয়েছে, সেগুলিও ক্রেডিট করুন।


9
আপনি কি দয়া করে ব্যাখ্যা করতে {} \;পারেন?
উইংকলার

6
{}"প্রতিটি মিলে যাওয়া ফাইল / ফোল্ডারের জন্য" হিসাবে পড়া যায় - অর্থাত এটি প্রতিটি "পাওয়া" ফাইল / ফোল্ডারের পরিবর্তে for ধারাটির \;জন্য একটি টার্মিনেটর -exec
wmorrison365

2
ডিরেক্টরিটি খালি না হলে এটি আমাকে "মুছতে পারে না" ত্রুটি দেয়
অন্ধ চোখের

1
-prune@ ডেভিড গ্রেসনের পরামর্শ অনুসারে উত্তরে পতাকা যুক্ত করার বিষয়টি বিবেচনা করুন । এটি না করে, findএখনও হারিয়ে যাওয়া ফোল্ডারটি দেখার চেষ্টা করবে এবং শেষ পর্যন্ত একটি ত্রুটি কোড সহ প্রস্থান করবে যা উদাহরণস্বরূপ ডকার বিল্ডকে ব্যর্থ করতে পারে।
Czyzby

160

"A" নামের সন্ধান করুন এবং আপনার ইচ্ছা অনুযায়ী নামগুলি মুছে ফেলার জন্য আরএম এক্সিকিউট করুন:

find . -name a -exec rm -rf {} \;

Ls ব্যবহার করে প্রথমে এটি তালিকাতে পরীক্ষা করুন:

find . -name a -exec ls {} \;

এটি কেবল ডিরেক্টরিগুলি সরায় এবং প্লেইন ফাইলগুলি সরায় না তা নিশ্চিত করতে, "-type d" আরগটি (মন্তব্যগুলিতে প্রস্তাবিত হিসাবে) ব্যবহার করুন:

find . -name a -type d -exec rm -rf {} \;

"{}" হ'ল প্রতিটি ফাইল "এ" পাওয়া যায় তার পরিবর্তে প্রতিস্থাপনের মাধ্যমে প্রতিটি বিরুদ্ধে এক্সিকিউট কমান্ড কার্যকর করা হয়।


4
আপনি সম্ভবত সেখানে একটি "টাইপ ডি" যুক্ত করতে চান তবে কেবল একই নামের সাথে কোনও ফাইল মিলছে।
মার্ক লোজার

3
আরও মনে রাখবেন যে এটি এমন 1/2/a/3/4কোনও কিছু ধরে ফেলবে , যার উদ্দেশ্য নাও থাকতে পারে, তাই সুপারিশের জন্য প্রথমে পরীক্ষার জন্য +1 ...
twalberg

9
এর echo {}পরিবর্তে প্রথমে এটি পরীক্ষা করতে পুনরায় করুনls {}
চার্নি কেয়ে

2
এই যে আমার node_modules/
saruftw

6
আমি ব্যবহার করেছি find . -name a -type d -exec rm -rf {} \;এবং এটি কাজ করেছে, যদিও এটি find: ‘./subdir/subdir/a’: No such file or directoryমুছে ফেলা প্রতিটি ডিরেক্টরি মুদ্রিত ।
প্যাকওভারফ্লো

59

এটিও কাজ করে - এটি "ক" নামে পরিচিত সমস্ত ফোল্ডার এবং তাদের সামগ্রীগুলি সরিয়ে ফেলবে:

rm -rf `find -type d -name a`

@ বুফালো, কিভাবে আসবেন? এই ডিফোটি কাজ করে তবে অন্যরাও কাজ করে। এমন কোনও vভির খোঁজ পেয়ে অবাক হয়ে যাবেন যেখানে এটি কাজ করে তবে অন্যরা সমস্ত উত্তর দেয় নি মূলত find/rm
wmorrison365

4
@ wmorrison365 কারণ আপনি যদি find . -name a -exec rm -rf {} \;এটি করেন তবে এটি আপনাকে যেমন একটি ত্রুটি প্রদান করে আরও আইটেম সন্ধানের জন্য ডিরেক্টরিতে প্রবেশ করার চেষ্টা করবে তখন এটি ক্রাশ হবে find: '1/2/3/a': No such file or directory
অ্যালেক্স গ্রানহোলম

অ্যালেক্স গ্রানহোলম নিশ্চিত, তবে 'এ' নামের সমস্ত ফোল্ডার তবুও মুছে ফেলা হয়েছে। আপনার বক্তব্য হিসাবে, অনুসন্ধানগুলি পরে মুছে ফেলা 'এ' ফোল্ডারের ভিতরে দেখতে পারে না তবে এটি কোনও বিষয় নয়। মুছে ফেলার আগে পরবর্তী প্রক্রিয়াকরণের জন্য 'ক' এর সামগ্রী রাখতে চাইলে ওপি যা বলেছিল তার থেকে আলাদা ব্যবহার-মামলা।
wmorrison365

6
@ wmorrison365 হ্যাঁ, ডিরেক্টরিগুলি মুছে ফেলা হয়েছে তবে কমান্ডটি ব্যর্থ হয় এমন কোনও সমাধানের প্রস্তাব দেওয়া ভাল বলে মনে করি না (ননজারো প্রস্থান কোড ফেরৎ দেয়)।
অ্যালেক্স গ্রানহোলম

1
এটি আমাকে একটি ত্রুটি দিচ্ছিল illegal option --t। আমিও মধ্যে (অনুসন্ধান করতে ডিরেক্টরির পাস ছিল stackoverflow.com/questions/25840713/... ): rm -rf `find . -type d -name a`
স্টিভ হ্যারিসন

25

নামের সাথে সমস্ত ডিরেক্টরি মুছতে foo, চালান:

find -type d -name foo -a -prune -exec rm -rf {} \;

অন্যান্য উত্তরগুলি একটি গুরুত্বপূর্ণ বিষয় অনুপস্থিত: -pruneবিকল্প। ছাড়া -prune, জিএনইউ অনুসন্ধানটি মিলবে নামের সাথে ডিরেক্টরিটি মুছে ফেলবে এবং তারপরে মেলে এমন আরও ডিরেক্টরিগুলি খুঁজে পেতে এটিতে পুনরাবৃত্তি করার চেষ্টা করবে। -pruneবিকল্প বলা হয়েছে যে সব একটি ডিরেক্টরির মধ্যে recurse না যে অবস্থার সাথে মিলেছে।


21

আমি ব্যবহার শেষ করে node_modulesআমার কাজের ব্যাকআপ করার আগে আমার ফোল্ডারগুলি মুছতে চাইছি rsync। একটি মূল প্রয়োজনীয়তা হ'ল node_modulesফোল্ডারটি নীস্ট করা যায়, সুতরাং আপনার -pruneবিকল্পটি দরকার need

ফোল্ডারগুলি মুছে ফেলার জন্য দৃশ্যত যাচাই করতে প্রথমে আমি এটি চালিয়েছি:

find -type d -name node_modules -prune

তারপরে আমি এই সমস্তগুলি মুছতে এটি চালিয়েছি:

find -type d -name node_modules -prune -exec rm -rf {} \;

পিস্তাকে ধন্যবাদ


আহ যে খুব সুন্দরভাবে কাজ করেছে, এটিকে আপনি সহজেই ব্যবহার করতে পারার জন্য এটি একটি ছোট sh #!/bin/bash echo "Found node_modules: "; find -type d -name node_modules -prune; read -r -p "Do you really want to delete all directories? [yes/no] " input; if [ ! $input != "yes" ]; then find -type d -name node_modules -prune -exec rm -rf {} \;; fi
শেলসক্রিপ্ট

11
find ./ -name "FOLDERNAME" | xargs rm -Rf

কৌতুক করা উচিত। সতর্কবাণী যদি আপনি দূর্ঘটনাক্রমে একটি পাম্প .বা /মধ্যে xargs rm -Rfআপনার সমগ্র কম্পিউটার এটা ফিরে পেতে, একটি অপারেটিং সিস্টেম পুনরায় ইনস্টল করুন প্রয়োজন একটি বিকল্প ছাড়া মুছে ফেলা হবে।


2
ওহ, কেবল সেই কিশোর ক্ষুদ্র ঝুঁকি। সব কি? হা হা। সতর্কতার জন্য সুপার ধন্যবাদ। আমি অবশ্যই টাইপিংয়ের ভুলটি করব।
টিঙ্কারটেনারসফটওয়্যারগুই

9

আমার মতো 100 টিরও বেশি ফাইল ছিল

log-12
log-123
log-34
....

উপরের উত্তরগুলি আমার পক্ষে কার্যকর হয়নি

তবে নিম্নলিখিত আদেশটি আমাকে সাহায্য করেছিল।

find . -name "log-*" -exec rm  -rf {} \;

আমি দিয়েছিলাম -typeযেমন .তাই এটি উভয় ফাইল এবং ফোল্ডার যা দিয়ে শুরু হয় মুছে ফেলেlog-

এবং rm -rfফোল্ডারগুলি পুনরাবৃত্তভাবে মুছে দেয় এমনকি এতে ফাইল রয়েছে।

যদি আপনি একা ফোল্ডার চান

find -type d -name "log-*" -exec rm  -rf {} \;

ফাইল একা

find -type f -name "log-*" -exec rm  -rf {} \;

8

একাধিক উত্তরগুলির সংমিশ্রণ, এখানে একটি কমান্ড রয়েছে যা লিনাক্স এবং ম্যাকোস উভয় ক্ষেত্রেই কাজ করে

rm -rf $(find . -type d -name __pycache__)

শুধুমাত্র একজন যে আমার পক্ষে কাজ করেছিল
সেগুলিও

7

আরেকটা:

"-exec rm -rf {} \;" can be replaced by "-delete"

find -type d -name __pycache__ -delete      # GNU find
find . -type d -name __pycache__ -delete    # POSIX find (e.g. Mac OS X)

3
এই উত্তরটি খালি ফোল্ডারগুলির জন্যই কাজ করে। -deleteখালি খালি ফোল্ডারগুলি সরিয়ে দেয় না।
মানিনাক

ওএসএক্স সংস্করণ যোগ করার জন্য ধন্যবাদ
schu34

6

এই আদেশটি আমার পক্ষে কাজ করে। এটি পুনরাবৃত্তভাবে তার কাজ করে

find . -name "node_modules" -type d -prune -exec rm -rf '{}' +

। - বর্তমান ফোল্ডার

"নোড_মডিউলস" - ফোল্ডারের নাম


-2

পাথ / to / the / ফোল্ডারগুলি -ম্যাক্সডেপথ 1-নাম "আমার_ *" -প্রকার ডি-মোছা

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