নির্দিষ্ট তারিখে তৈরি ফাইলগুলি অনুসন্ধান করতে কীভাবে 'ফাইন্ড' ব্যবহার করবেন? [বন্ধ]


254

findনির্দিষ্ট তারিখে তৈরি হওয়া ফাইলগুলি অনুসন্ধানের জন্য আমি কীভাবে UNIX কমান্ডটি ব্যবহার করব ?


8
দেখে মনে হচ্ছে বাশ স্ক্রিপ্টিং প্রশ্নগুলির অনুমতি দেওয়া হোক।
অ্যালান

@ মিশেলশেপার: আমি জানি না যে মন্তব্যটি দিয়ে কোথায় শুরু করতে হবে।
লাইটনেস রেস

1
@ নোটিনলিস্ট: এখানে উত্তরটি দেওয়া হয়েছে: meta.stackexchange.com/questions/10249/… দুর্ভাগ্যক্রমে, এটি দেখা গেছে যে একটি সময়সীমা শেষ হয়ে গেছে। করুণা, যেহেতু ওয়েব অনুসন্ধানগুলি এখানে এখনও অবতরণ করেছে এবং গ্রহণযোগ্য উত্তরটি অনেক লোকের জন্য সহায়ক।
মাইকেল শ্যাপার 22

@ মিশেলশেপার: আপনি যদি ইউনিক্স.স্ট্যাকেক্সেঞ্জোয়েন্ট.কম এ স্থানান্তরিত করার জন্য ভোট দেওয়ার কোনও বিকল্প খুঁজে পেতে পারেন তবে আমাকে এটিকে নির্দেশ করুন। যেহেতু আপনি না প্রতিনিধির নিকট ডায়ালগ দেখতে আছে, আমি তোমাকে একটি ইঙ্গিত দেব: এক নয়। আপনি কী বিষয়ে কথা বলছেন সে সম্পর্কে আপনার কোনও ধারণা না থাকলে কম সংক্রামক হওয়ার বিষয়টি বিবেচনা করুন। তোমার মনোযোগের জন্য ধন্যবাদ.
অরবিটে লাইটনেস রেস

5
@ লাইটনেসেসেসিন অরবিত: 'যুদ্ধাত্মক' হয়ে উঠার জন্য আমি ক্ষমাপ্রার্থী। আমাকে আমার মন্তব্যগুলি সম্পাদনা করার অনুমতি দেওয়া হচ্ছে না, তবে ভবিষ্যতের রেফারেন্সের জন্য, আমার মন্তব্যটি যে প্রশ্নটির প্রশংসা করেছিল তাতে প্রশংসা করেছিল? আমার অবশ্যই বলতে হবে, আপনার পূর্ববর্তী মন্তব্যটি সন্দেহের সুবিধা দেওয়ার পরেও আমি কিছুটা অন্ধ পক্ষের বোধ করছি। মাইগ্রেশন কীভাবে কাজ করে তা খতিয়ে দেখে আমি আসলে 'আমাকেও' যুক্ত করার চেয়ে আরও গঠনমূলক হওয়ার চেষ্টা করছিলাম: মেটা.স্ট্যাকেক্সেঞ্জ / ডটকম / এ / ২0250/249555 -০ দিনের সময়সীমা সেই বিকল্পটি আড়াল করে, সম্ভবত? বাম স্টিয়ারের জন্য দুঃখিত আপনার সময় এবং মনোযোগের জন্য আপনাকে আবার ধন্যবাদ — আন্তরিকভাবে।
মাইকেল শ্যাপার

উত্তর:


323

সর্বাধিক নির্দেশিত হিসাবে, আপনি পারবেন না, তবে পরিবর্তিত বা অ্যাক্সেস করা ফাইলগুলি পরীক্ষা করা এতটা কঠিন নয়। আমি এই সম্পর্কে একটি টিউটোরিয়াল লিখেছিলাম , আজ হিসাবে দেরী। যার সারমর্মটি ব্যবহার করা -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

আপনি যদি ফাইলে অনুমতিগুলি পরিবর্তন না করেন তবে 'গ' সাধারণত নির্মাণের তারিখের সাথে মিল রাখে।


7
আমার সন্ধানের সংস্করণ (GNU 4.2.32) -নিয়রএক্সএক্স পূর্বাভাসকে সমর্থন করে বলে মনে হচ্ছে না। একটি নির্দিষ্ট ন্যূনতম সংস্করণ প্রয়োজন? বা এটি একটি বিশেষ কনফিগার স্যুইচ দিয়ে সংকলন খোঁজার ক্ষেত্রে?
ইউকনডুড

1
@ ইউকনডুড: ঠিক বলেছেন। আমার স্থানীয়ভাবে সন্ধানের সংস্করণটি - জিএনইউ ৪.৪.০ রয়েছে - এটি রয়েছে, যখন আমার ড্রিমহোস্টে রয়েছে ৪.১.২০ নেই। যদিও দুটি ফাইল তৈরি করার সাথে কলডেজটি কাজ করা উচিত।
Arve

1
কিছু সিস্টেমে (ফ্রিবিএসডি, ওএস / এক্স ...) -newerBtফাইলের জন্মের (সৃষ্টি) সময় মিলবে ।
স্টিফেন চেজেলাস

3
উল্লেখ্য, ২০০১ সাল থেকে ফ্রিবিএসডি--newerxt তে উপলব্ধ (যেখানে এটি প্রথম প্যাচ হিসাবে 1998 সালে সরবরাহ করা হয়েছিল ), এইচপি / ইউএক্স আবিষ্কারের ভিত্তিতে কয়েকটি বিএসডি এবং জিএনইউ (2007 সালে 4.3.3 থেকে) পাওয়া গেছে, যা চালু হয়েছিল (তবে কোথায় Y == t সমর্থিত নয়)। -newerXY
স্টিফেন চেজেলাস

ব্যবহার করুন: সন্ধান করুন (জিএনইউ সন্ধানকারী) ৪.৪.০, এই সিনট্যাক্সটি SUSE এক্সটেন 3 এ কাজ করে না, যদি সে তারিখে ফাইল / ডব্লিউ
এমটাইম

68

find location -ctime time_period

সময়_পরিবর্তনের উদাহরণ:

  • 30 দিনেরও বেশি আগে: -ctime +30

  • 30 দিনেরও কম সময় আগে: -ctime -30

  • ঠিক 30 দিন আগে: -ctime 30


7
সমস্যাটি হ'ল আমি নির্দিষ্ট সময়ের জন্য পরীক্ষা করতে চাই, সময় সময়ের মধ্যে নয়।
sverrejoh

1
সুতরাং এটি কত দিন আগে খুঁজে বের করুন এবং সেই নম্বরটি ব্যবহার করুন।
jmanning2k

15
ctimeসৃষ্টির সময়টির সাথে কোনও সম্পর্ক নেই , এটি ইনোড পরিবর্তনের সময়।
স্টিফেন চেজেলাস

47

এটি দুটি পদক্ষেপ তবে আমি এটি এইভাবে করতে পছন্দ করি:

প্রথমে নির্দিষ্ট তারিখ / সময় দিয়ে একটি ফাইল তৈরি করুন। এই ক্ষেত্রে, ফাইলটি মধ্যরাতে ২০০৮-০১-০১

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

3
findযে বয়স্কের অভাব রয়েছে তার সমাধানের জন্য +1-newerXY
ফিলিপ আলভারেজ

1
আইএমও, এই মুহূর্তে এটি গ্রহণযোগ্য সমাধান হওয়া উচিত। 2.6.18-348.18.1.el5 কার্নেলটি চালানোর জন্য আমি নতুন সংকেত পেতে পারি না, আরও নতুন কার্নেল ছেড়ে দিন।
ডার্কফোরস

এখানেই ডার্কফোরস, নিউমার্ট কার্যকারিতাটি খুব জঘন্য বলে মনে হচ্ছে
নিকেন

34

আপনি এটি করতে পারেন:

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

বেশিরভাগ লোকেরা এটিই চায় তবে এটি পর্যাপ্ত পরিমাণে আপত্তি পায় নি !!!
sjas

2
এটি এক ডিরেক্টরিতে কয়েক মিলিয়ন ফাইল থাকার কাজ নাও করতে পারে।
ডেনিস নল্টে

3
গ্রেপ অনুসন্ধান শব্দটি ফাইলের নামের সাথে থাকলে পার্শ্ব প্রতিক্রিয়া রয়েছে।
Snorex

mywiki.wooledge.org/ParsingLs - সম্ভবত একটি ভাল পদ্ধতির তৈরির তারিখটি মেশিন-পঠনযোগ্য আকারে মুদ্রণ করা, সম্ভবত statআপনার যদি না থাকে তবে find -printf
ট্রিপলি

12

আপনি পারবেন না। -সি সুইচ আপনাকে জানায় যে কখন অনুমতিগুলি সর্বশেষ পরিবর্তন করা হয়েছিল, - একটি সাম্প্রতিক অ্যাক্সেসের সময় পরীক্ষা করে, এবং -এম সংশোধনের সময় পরীক্ষা করে। লিনাক্স (ext3) এর বেশিরভাগ স্বাদের দ্বারা ব্যবহৃত ফাইল সিস্টেমটি "তৈরির সময়" রেকর্ডকে সমর্থন করে না। দুঃখিত!


7
প্রকৃতপক্ষে, এটি কেবল ফাইল-সিস্টেমের ধরণ নয় - ফাইল সিস্টেমটি ধরে রাখলেও এমন তথ্য পাওয়ার জন্য কোনও সিস্টেম ইন্টারফেস নেই। প্রথমদিকে ফিরে যাওয়া ইউনিক্সের অন্যতম ঘাটতি, যে কারণে ইউনিক্স কখনই তা গ্রহণ করবে না।
ক্রিসডাউন

1
ইউনিক্স কখন ছাড়বে না?
lucid_dreamer

8

@ ম্যাক্স: তৈরির সময় সম্পর্কে ঠিক।

যাইহোক, যদি আপনি একটির জন্য অতিবাহিত দিন যুক্তি গণনা করতে চান -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


2

-টিটাইম, -কালাইম এবং -মাইটাইম স্যুইচগুলির সাহায্যে আপনি যা অর্জন করতে চান তার কাছাকাছি যেতে পারেন।


-3
cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir

1
আপনি ফাইলগুলি অনুলিপি করছেন কেন? কমান্ডের `ls ...`কাজ ছাড়াও , এটি findসরঞ্জামটি ব্যবহার করে না ।
ইয়ামেনেকো

-5

আমি এই স্ক্রিপ্টটি একটি স্ক্রিপ্টে পেয়েছি যা 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 ইত্যাদি পরামিতিগুলি আপনাকে এখানে সহায়তা করবে।

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