নির্দিষ্ট ফাইলের চেয়ে পুরানো ফাইলগুলি মুছুন


14

আমাকে একটি নির্দিষ্ট ফাইলের চেয়ে পুরানো সমস্ত ফাইল ফোল্ডার থেকে মুছতে হবে।
CentOS 7 এ বাশ চলছে।

এর জন্য আমার একটি সমাধান রয়েছে তবে আমি মনে করি এটি করার আরও একটি মার্জিত উপায় হওয়া উচিত:

reference_file=/my/reference/file

get_modify_time()
{
    stat $1 | grep -Po "Modify: \K[0-9- :]*"
}

pit=$(get_modify_time $reference_file)
for f in /folder/0000* ; do [[ "$pit" > "$(get_modify_time $f)" ]] && rm $f ; done

উত্তর:


28

আমি এটি চেষ্টা করি নি, তবে findপুরো অপারেশনটি ঠিকঠাকভাবে পরিচালনা করতে সক্ষম হওয়া উচিত:

$ find dir/ -type f ! -newer reference -delete

... বা ...

$ find dir/ -type f ! -newer reference ! -name reference -delete

মূলত:

  • ! -newer referenceএর চেয়ে কম পরিবর্তিত ফাইলগুলির সাথে মেলে reference
  • -delete এগুলি মুছে দেয়।
  • ! -name referenceবাদ দেয় reference, যদি এটির অধীনেও থাকে dir/এবং আপনি এটি রাখতে চান।

এর থেকে পুরানো referenceএবং এর অধীনে থাকা সমস্ত ফাইল মুছে ফেলা উচিত dir/


2
পারফেক্ট :)। -maxdepth 1
সন্ধানটি

3
! -newerএর অর্থ "নতুন নয়", সুতরাং "বয়স্ক বা একই বয়স "; ফাইলটি যদি সেই পথে থাকে তবে এটি নিজেই মিলবে find, কিছু মনে রাখবেন।
ফেরদা

1
@ferada আপনি এটি বাদ দিলে তা হবে না, এই কারণেই আমার উত্তরটিতে অন্তর্ভুক্ত রয়েছে ! -name reference(তৃতীয় বুলেট দেখুন)।
জন ডব্লিউ এইচ স্মিথ

7

অপারেটর ( এবং এর চেয়ে পুরানো ) testব্যবহার করে ফাইল পরিবর্তনের সময়ের সাথে তুলনা করুন :-nt-ot

if [ "$file1" -ot "$file2" ]; then
    #do whatever you want;
fi

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