যে ফোল্ডারে এটি সন্ধান করে তাতে আমি কীভাবে "সন্ধান" করব?


18

আমি নিম্নলিখিত কমান্ড চালাচ্ছি:

find /var/www/html/content/processing -type d -mtime +1 -exec rm -rf {} \;

আমি ফোল্ডারের অধীনে সমস্ত ফোল্ডার মুছতে চাই processing(প্রসেসিং ফোল্ডারটি কখনই মোছা উচিত নয়)।

কমান্ডটি processingফোল্ডারটিও মুছে ফেলছে । আমি কীভাবে স্ক্রিপ্টটিকে সেই ফোল্ডারের অধীনে কেবল ফোল্ডারগুলি মুছতে সীমাবদ্ধ করব ?


উত্তর:


32

সবচেয়ে সহজ উপায় হ'ল কেবল যুক্ত করা -mindepth 1, যা প্রথম গভীরতার শ্রেণিবিন্যাস এড়িয়ে যাবে এবং এভাবে আপনার পিতামাতার ডিরেক্টরিটি ছেড়ে যাবে।

এছাড়াও, আপনাকে অতিরিক্ত -execকল করার দরকার নেই rm, আপনি কেবল deleteফোল্ডারগুলি খালি থাকলে সরাসরি করতে পারেন।

find /var/www/html/content/processing -mindepth 1 -type d -mtime +1 -delete

যদি তারা খালি না থাকে:

find /var/www/html/content/processing -mindepth 1 -type d -mtime +1 -exec rm -rf {} \;

আপনি যদি অলস হন তবে আপনার ওয়াইল্ডকার্ড প্রসারিতও হতে পারে। যেহেতু *ডিফল্টরূপে বর্তমান ডিরেক্টরি অন্তর্ভুক্ত করা হয়নি ( সেট না dotglobকরা ), আপনি এটি করতেও পারেন:

find /var/www/html/content/processing/* -type d -mtime +1 -delete

তবে dotglobবিকল্পের কারণে এটি আবার লুকানো ফোল্ডারগুলিও অন্তর্ভুক্ত করতে পারে না ।


হাই, আমি "সন্ধান: সতর্কতা পেয়েছি: আপনি একটি অ-বিকল্প যুক্তি-টাইপের পরে -mindepth বিকল্পটি নির্দিষ্ট করেছেন, তবে বিকল্পগুলি অবস্থানগত নয় (-মাইন্ডপথ তার আগে নির্দিষ্ট করা পরীক্ষাগুলি এবং তার পরে নির্দিষ্ট করাগুলিকে প্রভাবিত করে) দয়া করে বিকল্পগুলি নির্দিষ্ট করুন অন্যান্য যুক্তিগুলির আগে। "এবং" সন্ধান করুন: delete / ফোল্ডার / 50d82faf0e09e 'মুছতে পারে না: ডিরেক্টরিটি ফাঁকা নয় "
এলাদ ডটান

টাইপ করার আগে মননশীলতা যুক্ত করুন। ডিরেক্টরিগুলি খালি না হলে মুছে ফেলার জন্য আপনি মূলত rm পদ্ধতির সাথে লেগে থাকতে পারেন।
slhck

4

সমস্যাটি হ'ল অন্যান্য ডিরেক্টরিগুলির সাথে বর্তমান ডিরেক্টরিটি (।) প্রদান করে, সুতরাং এটি প্রসেসিং ফোল্ডারের পাশাপাশি উপ-ডিরেক্টরিগুলি মুছে দেয়। এটির কাছাকাছি যাওয়ার দ্রুত উপায় হ'ল বিকল্পটি সংযোজন করা

-not -name .

যা বর্তমান ডিরেক্টরিটি আউটপুট করা থেকে সন্ধান থামায় এবং ফলস্বরূপ এটি মুছে ফেলা থেকে বিরত থাকে।

প্রসেসিং ডিরেক্টরিতে আপনি যদি কমান্ডটি চালাচ্ছিলেন তবে এটি কাজ করবে, যাতে আপনি একটি নিখুঁত পথ ব্যবহার করছেন তা নিশ্চিত করার জন্য:

-not -name /var/www/html/content/processing

এবং পুরো আদেশটি হ'ল:

find /var/www/html/content/processing -type d -mtime +1 -not -name /var/www/html/content/processing -exec rm -rf {} \;

শেষ আদেশটি ভুল। -nameবেসনামকে বোঝায়, এটি কখনও স্ল্যাশের সাথে কোনও কিছুর সাথে মেলে না। আপনার সম্ভবত ব্যবহার করা দরকার -path
কামিল ম্যাকিয়েরোস্কি

1

ইতিমধ্যে উত্তর, এখনও আমি অন্য পদ্ধতির তালিকা করতে চাই।

find /var/www/html/content/processing -mindepth 1 -maxdepth 1 -type d

এটি শীর্ষ ডিরেক্টরি (এবং উপ ডিরেক্টরিগুলিও) বাদ দেবে এবং এখন আমরা যে আদেশটি প্রয়োগ করতে চাই তা প্রয়োগ করতে পারেন।

>> বিকল্পগুলি:
-মাইন্ডপথ 1: রুট ডিরেক্টরি বাদ দিতে
-ম্যাক্সডেপথ 1: সাব ডিরেক্টরিগুলি পার্সিং এড়ানোর জন্য। (নির্দিষ্ট পরিস্থিতিতে যেমন জিজ্ঞাসা করা হয়েছে, আপনার এটির দরকার নেই)।
টাইপ d: কেবল ডিরেক্টরি টাইপ তালিকা। এই বিকল্পটি মাইন্ডেপথ ম্যাক্সডেপথ ব্যবহারের পরে আসবে।


কেন -maxdepth 1? -type dদুবার কেন ? এটি কীভাবে গৃহীত উত্তরের চেয়ে আলাদা?
এট্টি

@ অ্যাটি: ধন্যবাদ, ভুলটি সংশোধন করেছেন। ম্যাক্সডেপথ প্রয়োজন হয় না তবে আপনি উপ-ডিরেক্টরি তালিকা বর্জন করতে চাইলে এটি কার্যকর হবে।
প্রশান্ত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.