এক্স ঘন্টা চেয়েও পুরানো ফাইলগুলি কীভাবে মুছবেন


191

আমি একটি বাশ স্ক্রিপ্ট লিখছি যা পুরানো ফাইলগুলি মুছতে হবে।

এটি বর্তমানে ব্যবহার করে প্রয়োগ করা হয়েছে:

find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete

এটি 1 দিনের চেয়ে পুরানো ফাইলগুলি মুছবে।

যাইহোক, আমার যদি 1 দিনের একটি সূক্ষ্ম রেজোলিউশনের প্রয়োজন হয়, তবে 6 ঘন্টা পুরানো বলুন? এটি করার মতো কি কোনও সুন্দর পরিষ্কার উপায় আছে, যেমন ফাইন্ড এবং -মাইটাইম ব্যবহার করা হচ্ছে?

উত্তর:


303

আপনার কি findআছে -mminবিকল্প? এটি আপনাকে সর্বশেষ পরিবর্তনের পর থেকে মিনিটের সংখ্যা পরীক্ষা করতে দেয়:

find $LOCATION -name $REQUIRED_FILES -type f -mmin +360 -delete

অথবা সম্ভবত tmpwatchএকই কাজ করতে ব্যবহার তাকান । phjr এছাড়াও tmpreaperমন্তব্য সুপারিশ ।


2
--Mmin + X ব্যবহার করে আমার অনুসন্ধানের সাথে সমস্ত ফাইল ফিরে আসে। এটি প্রথম পরীক্ষা না করার জন্য আমার দোষ, কিন্তু এই আদেশটি আমার হোম ডিরেক্টরিটি সরিয়ে দিয়েছে। আমার জন্য, --mmin -X সঠিক যুক্তি।
ব্র্যান্ডনেস

tmpreaper টিএমপিওয়াচের একটি কাঁটাচামচ। এটি নিরাপদ এবং ডিস্ট্রোতে ডেবিয়ান প্যাকেজ হিসাবে বিদ্যমান। ফাইন্ড-ডিলিটের সুবিধাগুলি: টেম্প্রেইপার সিমলিংক, সকেট, ফিফোস বা বিশেষ ফাইলগুলি সরিয়ে ফেলবে না
নাদির

নির্দেশ করুন যে $ রিক্যুয়রিডি_ফাইলেসগুলি কোট (ডাবল কোটস) এ থাকা দরকার এবং আপনি সমস্ত টেক্সট ফাইল বা ফাইলের জন্য " .txt" এর মতো একটি প্যাটার্ন ব্যবহার করতে পারেন যেমন: টেম্পের সাথে নামযুক্ত সমস্ত ফাইল মুছতে "টেম্প- " -
আছসিংহ

@ পলডিক্সন কীভাবে এটি পরিবর্তন করবেন যাতে $LOCATIONএবং $REQUIRED_FILESউভয়েরই একাধিক মান থাকতে পারে dir1 dir2এবং যেমন *.txt *.tmp?
এনিসে

@ এনিসে $ লোকেশন একটি একক ডিরেক্টরি। দেখতে - একাধিক এক্সটেনশন জন্য আপনি সম্ভবত -regex সঙ্গে একটি প্যাটার্ন ব্যবহার করতে চান সেটি stackoverflow.com/questions/5249779/...
পল ডিক্সন

9

আপনি এই কৌশলটি করতে পারেন: 1 ঘন্টা আগে একটি ফাইল তৈরি করুন এবং -newer fileযুক্তিটি ব্যবহার করুন ।

(বা এই touch -tজাতীয় ফাইল তৈরি করতে ব্যবহার করুন)।


1
কোনও-সোল্ডার সুইচ নেই (অন্তত আমার ফাইন্ড কমান্ডে), এবং এটিই প্রয়োজন। - নতুন সাহায্য করে না।
আইকনোক্লাস্ট

আপনি কি এমন টাচ কমান্ড দিতে পারেন যা 1 ঘন্টা পুরানো একটি ফাইল তৈরি করবে যা মেশিনগুলিতে কাজ করবে যা -মিন ব্যবহার করতে পারে না? (আপনি যদি লিনাক্সে থাকেন তবে -মিন উপলব্ধ থাকে, যদি না হয় তবে তারিখ এবং অন্যান্য কমান্ডগুলিও তুলনায় দুর্বল))
আইকনোক্লাস্ট

2
@ আইকনোক্লাস্ট সর্বদা 1 ঘন্টা পুরানো touch -t $(date -d '-1 hour' +%Y%m%d%H%M.00) testফাইল তৈরি করে test
rovr138

4

এখানে আমার জন্য কাজ করা পদ্ধতির (এবং আমি এটি উপরে ব্যবহার করা দেখছি না)

$ find /path/to/the/folder -name *.* -mmin +59 -delete > /dev/null

অবিচ্ছিন্ন ফোল্ডারগুলি রেখে যাওয়ার সময় 59 মিনিটেরও বেশি পুরানো সমস্ত ফাইল মুছে ফেলা হচ্ছে।


একক-উদ্ধৃতি '*.*'বা শেল থেকে ভাল এটি findসমাধানের জন্য ওয়াইল্ডকার্ড হিসাবে রাখার পরিবর্তে এটি প্রকৃত ফাইলনামগুলিতে প্রসারিত করবে । এটি findসাবদারদের উপর পুনরাবৃত্ত অপারেশন বিরতি দেয়।
MestreLion

এছাড়াও মনে রাখবেন যে -name '*.*'হবে না যেমন কোন এক্সটেনশন আছে ডিলিট ফাইল, README, Makefile, ইত্যাদি
MestreLion

1

সুনোস 5.10 এর জন্য

 Example 6 Selecting a File Using 24-hour Mode


 The descriptions of -atime, -ctime, and -mtime use the  ter-
 minology n ``24-hour periods''. For example, a file accessed
 at 23:59 is selected by:


   example% find . -atime -1 -print




 at 00:01 the next day (less than 24 hours  later,  not  more
 than one day ago). The midnight boundary between days has no
 effect on the 24-hour calculation.

0

-মিনিট কয়েক মিনিটের জন্য।

ম্যান পৃষ্ঠাটি দেখার চেষ্টা করুন।

man find

আরও ধরণের জন্য।


0

যদি আপনার "সন্ধান" এর সংস্করণটিতে "-মিন" না থাকে, তবে "-মটাইম -0.041667" "শেষ মুহুর্তের মধ্যেই" খুব কাছাকাছি চলে আসে, তাই আপনার ক্ষেত্রে, ব্যবহার করুন:

-mtime +(X * 0.041667)

সুতরাং, যদি X এর অর্থ 6 ঘন্টা হয় তবে:

find . -mtime +0.25 -ls

24 ঘন্টা * 0.25 = 6 ঘন্টা কাজ করে


আশাবাদী ছিল কারণ এই পুরানো ইউএনআইএক্স -'মিমিন নেই, তবে দুর্ভাগ্যক্রমে এটি কোনও সহায়ক নয় কারণ এই পুরানো ইউএনআইএক্স এছাড়াও মাইটাইমের জন্য ভগ্নাংশের মান পছন্দ করে না: সন্ধান করুন: -মটাইমের সাথে যুক্ত করতে হবে -2147483647 2147483647
kbulgrien

0

@ আইকনোক্লাস্ট অন্য পথে উত্তর দেওয়ার বিষয়ে তাদের মন্তব্যে যেভাবে ভাবছেন সে সম্পর্কে যা করতে পারেন তা এখানে is

ব্যবহারকারী বা /etc/crontabফাইল তৈরি করতে ক্রন্টব ব্যবহার করুন /tmp/hour:

# m h dom mon dow user  command
0 * * * * root /usr/bin/touch /tmp/hour > /dev/null 2>&1

এবং তারপরে আপনার কমান্ডটি চালাতে এটি ব্যবহার করুন:

find /tmp/ -daystart -maxdepth 1 -not -newer /tmp/hour -type f -name "for_one_hour_files*" -exec do_something {} \;

*/1প্রতি ঘন্টা জন্য আপনার ক্রন্টব অপ্রয়োজনীয়। এটি আওয়ার ফিল্ডে * রাখার মতোই।
colm.anseo


0

যদি findকারও না থাকে -mminএবং যদি এটির সাথে আটকে থাকে findযা কেবল পূর্ণসংখ্যার মান গ্রহণ করে-mtime , তবে "অপেক্ষাকৃত পুরানো" "এর চেয়ে নতুন নয়" এর সমান বলে যদি কেউ বিবেচনা করে তবে অগত্যা সবগুলি হারাবে না।

আমরা যদি এমন কোনও ফাইল তৈরি করতে সক্ষম হয়ে থাকি যা আমাদের কাটা বন্ধ সময়ের একটি মাইটাইম থাকে, আমরা জিজ্ঞাসা করতে পারি find আমাদের রেফারেন্স ফাইলটির চেয়ে "নতুন নয়" ফাইলগুলি সনাক্ত ।

সঠিক সময় স্ট্যাম্প যে কোনো ফাইল তৈরি করার জন্য একটি বিট জড়িত একটি সিস্টেম যে পর্যাপ্ত নেই কারণ findসম্ভবত একটি কম সক্ষম হয়েছে dateযে কমান্ড মত কাজগুলি করতে পারে: date +%Y%m%d%H%M%S -d "6 hours ago"

ভাগ্যক্রমে, অন্যান্য পুরানো সরঞ্জামগুলি যা এটি পরিচালনা করতে পারে, আরও অল্পস্বল্পভাবে হলেও।

বিবেচনা করুন যে ছয় ঘন্টা 21600 সেকেন্ড হয়। আমরা ছয় ঘন্টা আগে সময়টি দরকারী যে বিন্যাসে খুঁজে পেতে চাই:

$ date && perl -e '@d=localtime time()-21600; \
  printf "%4d%02d%02d%02d%02d.%02d\n", $d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0]'
> Thu Apr 16 04:50:57 CDT 2020
202004152250.57

পার্ল বিবৃতিটি একটি কার্যকর তারিখ তৈরি করেছে, তবে এটি আরও ভালভাবে ব্যবহার করতে হবে:

$ date && touch -t `perl -e '@d=localtime time()-21600; \
  printf "%4d%02d%02d%02d%02d.%02d\n", \
  $d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0]'` ref_file && ls -l ref_file
Thu Apr 16 04:53:54 CDT 2020
-rw-rw-rw-   1 root     sys            0 Apr 15 22:53 ref_file

এখন এই পুরানো ইউনিক্সের সমাধান হ'ল লাইন দিয়ে কিছু:

$ find . -type f ! -newer ref_file -a ! -name ref_file -exec rm -f "{}" \;

আমাদের রেফারেন্স ফাইলটি পরিষ্কার করা ভাল ধারণা হতে পারে ...

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