লিনাক্স: <তারিখের চেয়ে পুরানো ফাইলগুলি সনাক্ত করতে সন্ধান করুন


31

findএক্স দিন আগের চেয়ে কম সংশোধিত ফাইলগুলি সন্ধানের জন্য ভাল সমর্থন রয়েছে, তবে আমি findনির্দিষ্ট তারিখের পরে সংশোধিত সমস্ত ফাইলগুলি সনাক্ত করতে কীভাবে ব্যবহার করতে পারি ?

আমি এটি করার জন্য findম্যান পৃষ্ঠায় কিছু খুঁজে পাচ্ছি না , কেবলমাত্র অন্য ফাইল সময়ের সাথে তুলনা করতে বা তৈরি সময় এবং এখনকার মধ্যে পার্থক্যগুলি পরীক্ষা করতে। পছন্দসই সময়ের সাথে একটি ফাইল তৈরি করা এবং এটি করার একমাত্র উপায়টির সাথে তুলনা করা?


1
এটি সুপার ইউজার ডটকম
জোশ ব্রোভার

6
আমি এটি বন্ধ করতে যাচ্ছি না: সিসাদমিনদের জন্যও আকর্ষণীয় হতে পারে।
স্প্ল্যাটনে

কমান্ডটি একটি ব্যাকআপ স্ক্রিপ্টের অংশের জন্য, যা আমাদের রাতের ব্যাকআপগুলিতে ইনস্টলেশন পরবর্তী পোস্টে পরিবর্তন করা সমস্ত কিছু ধরে নিয়ে যায় from
DrStalker

নয় বছর বয়সী এবং আমি সবেমাত্র একটি নতুন উত্তর সংশোধন করার সময় লক্ষ্য করেছি: এই প্রশ্নের শিরোনাম এবং শৃঙ্গটি একই রকম হয় না। শিরোনামটিতে '<তারিখের চেয়ে পুরানো ফাইলগুলির জন্য জিজ্ঞাসা করা হয় তবে শরীরটি' নির্দিষ্ট তারিখের পরে সংশোধিত 'বলে। আমি 'পরে' এর অর্থ কোনও নির্দিষ্ট তারিখের চেয়ে বেশি পুরানো নয় interpret
জোফ্রে

উত্তর:


19

আপনার যদি কেবল 'নতুন ফাইল' থাকে তবে আপনি এই কর্মটি গ্রহণ করতে পারেন:

touch -t 201003160120 some_file
find . -newer some_file

মানুষের স্পর্শ:

  -t STAMP
          use [[CC]YY]MMDDhhmm[.ss] instead of current time

ধরে নিচ্ছি যে আপনার স্পর্শের এই বিকল্পটি রয়েছে (আমার ছোঁয়া 5.97)।


48

না, আপনি একটি তারিখ / সময়ের স্ট্রিং ব্যবহার করতে পারেন।

থেকে man find:

-neverXY রেফারেন্স রেফারেন্স
সহ বর্তমান ফাইলের টাইমস্ট্যাম্পের তুলনা করে। রেফারেন্স আর্গুমেন্টটি সাধারণত একটি ফাইলের নাম (এবং এর একটি টাইমস্ট্যাম্পগুলির তুলনা করার জন্য ব্যবহৃত হয়) তবে এটি একটি পরম সময়কে বর্ণনা করে এমন স্ট্রিংও হতে পারে। এক্স এবং ওয়াই অন্যান্য অক্ষরের স্থানধারক এবং এই বর্ণগুলি তুলনার জন্য কীভাবে রেফারেন্স ব্যবহৃত হয় তার সাথে সম্পর্কিত সময়টি নির্বাচন করে।

          a   The access time of the file reference
          B   The birth time of the file reference
          c   The inode status change time of reference
          m   The modification time of the file reference
          t   reference is interpreted directly as a time

উদাহরণ:

find -newermt "mar 03, 2010" -ls
find -newermt yesterday -ls
find -newermt "mar 03, 2010 09:00" -not -newermt "mar 11, 2010" -ls

5
আমি সেন্টোস ৫.২ ব্যবহার করছি, যা জিএনইউ সন্ধানের সংস্করণ ৪.২.২7 ব্যবহার করে এবং এটি "-নোয়ার ফাইল" ব্যতীত কোনও নতুন পরামিতি বা কোনও নতুন প্যারামিটার সমর্থন করে না
ড্রিস্টালকার

1
গনুহ 4.3.3 এবং নতুন সমর্থন findutils -newerXY অনুযায়ী savannah.gnu.org/bugs/?11668
ফিলিপ ডার্বিন

25

প্রশ্নের সাথে সরাসরি সম্পর্কিত নয়, তবে এখানে কারও কারও পক্ষে আকর্ষণীয় হতে পারে।

এটি কমান্ড সরাসরি কিছু প্রয়োজনীয় তারিখ চেয়ে পুরোনো ফাইল খুজে বের করার -older প্যারামিটার সমর্থন করে না, কিন্তু আপনি অস্বীকার বিবৃতি (গৃহীত উত্তর উদাহরণ ব্যবহার করে) ব্যবহার করতে পারেন:

touch -t 201003160120 some_file
find . ! -newer some_file

প্রদত্ত তারিখের চেয়ে পুরানো ফাইলগুলি ফিরিয়ে দেবে ।


3
সম্পাদক - সম্ভবত এটি গৃহীত উত্তরে মার্জ করা উচিত?
এনইজেসি

এই সমাধানটি এই ধরণের সমস্যা সমাধানের সবচেয়ে মার্জিত উপায় :)
ল্যাবিনোকল

9
find <dir> -mtime -20

এই ফাইন্ড কমান্ডটি গত 20 দিনের মধ্যে সংশোধিত ফাইলগুলি সন্ধান করবে।

  • এমটাইম -> সংশোধিত (আটাইম = অ্যাক্সেসড, সিটাইম = তৈরি হয়েছে)
  • -20 -> কম 20 দিনের পুরানো (20 অবিকল 20 দিন, 20 দিন 20 দিনের বেশি)

আপনি আকান অতিরিক্ত সীমাবদ্ধতা যুক্ত করুন:

find <dir> -mtime -20 -name "*.txt"

আগের মতোই, তবে কেবল '.txt' দিয়ে শেষ হওয়া ফাইলগুলি পাওয়া যায়।


5

কেবল যোগ করার জন্য - আপনি এমনকি সময়ের ব্যবধানে অনুসন্ধান করতে দুটি নিউমার্ট যুক্তি ব্যবহার করতে পারেন:

find ! -newermt "apr 01 2007" -newermt "mar 01 2007" -ls

মার্চ 2007 থেকে সমস্ত ফাইল সন্ধান করতে।


1

আপনি এটির মতো স্ক্রিপ্ট ব্যবহার করতে পারেন

#!/bin/bash

if [ $# -ne 1 ];then
  when="today"
else
  when=` date -d "$1" +"%s" `
fi
now=`date +"%s"`

seconds=`echo "$when - $now" | bc`
minutes=`echo "$seconds / 60 " | bc `

find . -cmin $minutes -print

এটিকে আপনার $ PATH এ "নিউরথন" হিসাবে সংরক্ষণ করুন এবং কার্যকর করার যোগ্য করুন।

তারপরে আপনি নির্দিষ্ট তারিখের পরে ফাইলটি সংশোধিত দেখতে পাবেন:

newerthan "2010-03-10"

অথবা

newerthan "last year"

অথবা

newerthan "yesterday"

আপনার যা ইচ্ছা তা করা উচিত। আমি মনে করি না অন্যথায় এটি অর্জনের জন্য একটি বিল্ট ইন আছে।


এটি bcপূর্ণসংখ্যার গণিতের জন্য ব্যবহার করার প্রয়োজন নেই , বাশ এটি করতে পারে: ((seconds = when - now))ফর্ম্যাট যুক্তির dateএকটি প্লাস থাকা উচিত date +%sএবং কিছু সিস্টেমে নাও থাকতে পারেdate -d
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া।

এটি সেন্টোস 5.2 এর জন্য। যা আছে -ডি। যদিও পূর্ণসংখ্যার গণিত সম্পর্কে জানার জন্য দরকারী।
রিচার্ড হলোয়ে

1
find ! -newermt “<DATE>”

এটার মত:

find ! -newermt “jan 01 2015” 

এটি আপনাকে আপনার বর্তমান ডিরেক্টরিতে 01-01-2015 এর চেয়ে পুরানো ফাইলগুলি দেবে।

https://muzaffarmahmoodblog.wordpress.com/2019/07/11/linux-command-to-remove-files-older-than-2015-in-a-directory/


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

0

যদি আপনার তারিখটি এমন ফর্ম্যাট করা হয় যে তুলনার জন্য এটি ঠিক আছে,

mydate=201003160120
find . -type f -printf "%AY%Am%Ad%AH%AM%AS/:%p\n" | awk -vd="$mydate" -F'/:' '$1 > d{ print $2 }'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.