নির্দিষ্ট তারিখের আগে তৈরি করা সমস্ত ফাইল সরান


26

আমার কাছে একটি ডিরেক্টরি রয়েছে যাতে প্রচুর পরিমাণে ফাইল থাকে (যেমন বছরের প্রতিটি দিনের জন্য লগ)। আমি 22/11 বলার আগে তৈরি করা সমস্ত ফাইল সরিয়ে ফেলতে চাই। আমি কীভাবে এটি অর্জন করতে পারি? আমি findতাহলে এক্সিকিউট ব্যবহার করা উচিত -rm? আমি ksh ব্যবহার করছি


1
সাধারণ সতর্কতাটি হ'ল ইউনিক্স ফাইল সিস্টেমে সাধারণত ফাইলটি কখন তৈরি করা হয়েছিল তার রেকর্ড থাকে না - কেবলমাত্র সময়টি ইনোড এবং সামগ্রীটি সর্বশেষ পরিবর্তিত হয়েছিল তা উপলব্ধ।
টবি স্পিড

উত্তর:


35

findফাইলগুলি মুছে ফেলার জন্য এখনও ব্যবহার করা পছন্দসই উপায়। আরও জানতে http://mywiki.wooledge.org/UsingFind দেখুন।

এটি করার একটি উপায় এটিতে টাইম স্ট্যাম্প সহ একটি ফাইল তৈরি করা। যেমন

touch -t 201311220000 /tmp/timestamp

এখন findটাইম স্ট্যাম্পের সাথে মেলে এমন জিএনইউ (বর্তমান ডিরেক্টরিতে অনুমান করে) ফাইলগুলি মুছুন :

find . -type f ! -newer /tmp/timestamp -delete  

বা জিএনইউ খুঁজে পাবে না

find . -type f ! -newer /tmp/timestamp -exec rm {} \;

2
এই সম্পর্কে কি ? এটা কি কাজ করে ? সন্ধান করুন-টাইপ চ-মিমটাইম +5-এক্সেক আরএম -f {} \;
ব্যবহারকারী 1058398

1
@ user1058398 এটি এখন থেকে 5 দিনেরও বেশি পুরানো ফাইলগুলি মুছবে।
ভ্যালেন্টাইন বাজরামি

এটি ফাইলের সাথে ফোল্ডারটিও মুছবে? @ val0x00ff
Alper

1
@ অবতার নং কারণ type -fফাইলগুলিতে সীমাবদ্ধতা কেবলমাত্র।
ভ্যালেন্টিন বজরামি

22

জিএনইউ বা কিছু বিএসডি findএর সাথে:

find . ! -newermt 2013-11-22 ! -type d -delete

দ্রষ্টব্য যে এটি ফাইলগুলির শেষ পরিবর্তন সময় পরীক্ষা করে। কিছু BSD গুলোর, আপনি ব্যবহার করতে পারেন -newerBtজায়গায় এর -newermtফাইলের inode চেক করতে জন্ম যদি পরিবর্তে প্রাপ্তিসাধ্য সময়।


1
find /path/to/directory/ -mtime +<number of days> -name '<file name>' -exec rm -rf {} \;

উদাহরণ:

find /Netap_fileshare_backup/SQL/DB_backups/xeo/ -mtime +15 -name 'ORA_XEO*' -exec rm -rf {} \;

এই ক্ষেত্রে এটি সমস্ত ফাইল সরিয়ে ফেলবে যা 15 দিনেরও বেশি সময়ের মধ্যে "ORA_XEO" দিয়ে শুরু হয়।


যদিও এটির সাথে আরও ভাল নজর রাখা যায় rm -rf, প্রথম কমান্ডটি 15 দিনের চেয়ে পুরানো কোনও ডিরেক্টরিতে থাকা সমস্ত কিছু সরিয়ে ফেলবে। (এছাড়াও, কেন -name
বন্ধুত্বের

আপনি ঠিক বলেছেন, আমাদের "(" ")" লাগানোর দরকার নেই।
Calafate

তবে আমরা যদি একটি শর্ত যুক্ত করতে চাই তবে এটি দরকারী। উদাহরণস্বরূপ, যদি আমরা ".jar" বা ".cp" দিয়ে শেষ হওয়া সমস্ত ফাইলগুলি মুছতে এবং "প্রাক্তন" দিয়ে শুরু করতে চাই। example.jar- এটা সরানো হবে example.cp- এটা সরানো হবে example.tar- এটা মুছে ফেলা হতে অভ্যস্ত
Calafate

এই ক্ষেত্রে আমরা ব্যবহার করতে পারি:find /path/to/directory/ -mtime +<number of days> \( -name '*.jar' -o -name '*.cp' \) -name 'ex*' -exec rm -rf {} \;
ক্যালাফেট

আপনি যদি মধ্যরাতে একেবারে চালনা না করেন এবং এটি এক সেকেন্ডের মধ্যে শেষ না করে এটি << দিনের সংখ্যা> থেকে সমস্ত ফাইল <দিনের দিনের সংখ্যা> এর চেয়ে পুরানো সমস্ত ফাইলের চেয়ে কিছু ফাইল সরিয়ে ফেলবে । গনুহ সঙ্গে findআপনি ব্যবহার করা উচিত -daystartবাধ্য করতে পরিবর্তক -mtimeমধ্যরাত্রি মান।
রোয়াইমা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.