find
নির্দিষ্ট তারিখে তৈরি হওয়া ফাইলগুলি অনুসন্ধানের জন্য আমি কীভাবে UNIX কমান্ডটি ব্যবহার করব ?
find
নির্দিষ্ট তারিখে তৈরি হওয়া ফাইলগুলি অনুসন্ধানের জন্য আমি কীভাবে UNIX কমান্ডটি ব্যবহার করব ?
উত্তর:
সর্বাধিক নির্দেশিত হিসাবে, আপনি পারবেন না, তবে পরিবর্তিত বা অ্যাক্সেস করা ফাইলগুলি পরীক্ষা করা এতটা কঠিন নয়। আমি এই সম্পর্কে একটি টিউটোরিয়াল লিখেছিলাম , আজ হিসাবে দেরী। যার সারমর্মটি ব্যবহার করা -newerXY
এবং ! -newerXY
:
উদাহরণ: June ই জুন, 2007 এ সংশোধিত সমস্ত ফাইলগুলি সন্ধান করতে:
$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08
২৯ শে সেপ্টেম্বর, ২০০৮ এ অ্যাক্সেস করা সমস্ত ফাইল সন্ধান করতে:
$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30
বা, একই দিনে তাদের অনুমতি থাকা ফাইলগুলি পরিবর্তিত হয়েছিল:
$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30
আপনি যদি ফাইলে অনুমতিগুলি পরিবর্তন না করেন তবে 'গ' সাধারণত নির্মাণের তারিখের সাথে মিল রাখে।
-newerBt
ফাইলের জন্মের (সৃষ্টি) সময় মিলবে ।
-newerxt
তে উপলব্ধ (যেখানে এটি প্রথম প্যাচ হিসাবে 1998 সালে সরবরাহ করা হয়েছিল ), এইচপি / ইউএক্স আবিষ্কারের ভিত্তিতে কয়েকটি বিএসডি এবং জিএনইউ (2007 সালে 4.3.3 থেকে) পাওয়া গেছে, যা চালু হয়েছিল (তবে কোথায় Y == t সমর্থিত নয়)। -newerXY
find location -ctime time_period
সময়_পরিবর্তনের উদাহরণ:
30 দিনেরও বেশি আগে: -ctime +30
30 দিনেরও কম সময় আগে: -ctime -30
ঠিক 30 দিন আগে: -ctime 30
ctime
সৃষ্টির সময়টির সাথে কোনও সম্পর্ক নেই , এটি ইনোড পরিবর্তনের সময়।
এটি দুটি পদক্ষেপ তবে আমি এটি এইভাবে করতে পছন্দ করি:
প্রথমে নির্দিষ্ট তারিখ / সময় দিয়ে একটি ফাইল তৈরি করুন। এই ক্ষেত্রে, ফাইলটি মধ্যরাতে ২০০৮-০১-০১
touch -t 0810010000 /tmp/t
এখন আমরা যে সমস্ত ফাইল নতুন অথবা উপরে ফাইল চেয়ে পুরোনো জানতে পারেন (ফাইল দ্বারা যাচ্ছে পরিবর্তিত তারিখ। এছাড়াও আপনি ব্যবহার করতে পারেন -anewer অ্যাক্সেস এবং জন্য -cnewer পরিবর্তিত ফাইল স্থিতি)।
find / -newer /tmp/t
find / -not -newer /tmp/t
আপনি স্পর্শ সহ দুটি ফাইল তৈরি করে নির্দিষ্ট তারিখের মধ্যে ফাইলগুলিও দেখতে পারেন
touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2
এটি দুটি তারিখ এবং সময়ের মধ্যে ফাইলগুলি সন্ধান করবে
find / -newer /tmp/t1 -and -not -newer /tmp/t2
find
যে বয়স্কের অভাব রয়েছে তার সমাধানের জন্য +1-newerXY
আপনি এটি করতে পারেন:
find ./ -type f -ls |grep '10 Sep'
উদাহরণ:
[root@pbx etc]# find /var/ -type f -ls | grep "Dec 24"
791235 4 -rw-r--r-- 1 root root 29 Dec 24 03:24 /var/lib/prelink/full
798227 288 -rw-r--r-- 1 root root 292323 Dec 24 23:53 /var/log/sa/sar24
797244 320 -rw-r--r-- 1 root root 321300 Dec 24 23:50 /var/log/sa/sa24
stat
আপনার যদি না থাকে তবে find -printf
।
আপনি পারবেন না। -সি সুইচ আপনাকে জানায় যে কখন অনুমতিগুলি সর্বশেষ পরিবর্তন করা হয়েছিল, - একটি সাম্প্রতিক অ্যাক্সেসের সময় পরীক্ষা করে, এবং -এম সংশোধনের সময় পরীক্ষা করে। লিনাক্স (ext3) এর বেশিরভাগ স্বাদের দ্বারা ব্যবহৃত ফাইল সিস্টেমটি "তৈরির সময়" রেকর্ডকে সমর্থন করে না। দুঃখিত!
@ ম্যাক্স: তৈরির সময় সম্পর্কে ঠিক।
যাইহোক, যদি আপনি একটির জন্য অতিবাহিত দিন যুক্তি গণনা করতে চান -atime
, -ctime
, -mtime
পরামিতি, আপনি নিম্নলিখিত অভিব্যক্তি ব্যবহার করতে পারেন
ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
"2008-09-24" কে আপনি যে তারিখটি চান তার সাথে প্রতিস্থাপন করুন এবং ELAPSED_DAYS তখন এবং আজকের মধ্যে দিনের সংখ্যাতে সেট করা হবে। (আপডেট: এর সাথে সারিবদ্ধ হওয়ার জন্য ফলাফল থেকে একটিকে বিয়োগ করুনfind
এর তারিখের বৃত্তাকার ))
সুতরাং, ২৪ শে সেপ্টেম্বর, ২০০৮ এ সংশোধিত যে কোনও ফাইল সন্ধানের জন্য কমান্ডটি হ'ল:
find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
যদি আপনার সংস্করণ @ আগমন: এর উত্তরে উল্লিখিত পূর্বাভাসগুলি find
সমর্থন না করে তবে এটি কাজ করবে -newerXY
।
cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir
`ls ...`
কাজ ছাড়াও , এটি find
সরঞ্জামটি ব্যবহার করে না ।
আমি এই স্ক্রিপ্টটি একটি স্ক্রিপ্টে পেয়েছি যা 14 দিনের চেয়ে পুরানো সমস্ত ফাইল মুছে দেয়:
CNT=0
for i in $(find -type f -ctime +14); do
((CNT = CNT + 1))
echo -n "." >> $PROGRESS
rm -f $i
done
echo deleted $CNT files, done at $(date "+%H:%M:%S") >> $LOG
আমি মনে করি কিছুটা অতিরিক্ত "লোক খুঁজে" এবং-সময় / -atime ইত্যাদি পরামিতিগুলি আপনাকে এখানে সহায়তা করবে।