লিনাক্স কমান্ডটি শেষ এন সেকেন্ডের মধ্যে পরিবর্তন হওয়া ফাইলগুলি সন্ধান করতে


19

আমি লিনাক্স কমান্ডটি চাই যাতে শেষ nসেকেন্ডে ফাইলগুলি পরিবর্তিত হয় ।

শেল স্ক্রিপ্ট বা অন্য কোন সরঞ্জাম রয়েছে যা আমি কমান্ড লাইন ইন্টারফেস বা জিইউআই থেকে চালাতে পারি?

উত্তর:


14

এর মত ফাইন্ড কমান্ড ব্যবহার করুন:

find . -name "*.txt" -mtime -60s

*.txtসর্বশেষ 60 সেকেন্ডে সংশোধিত সমস্ত ফাইলগুলি সন্ধান করতে ।


17
লিনাক্স-এ, খুঁজুন ব্যবহার (গনুহ থেকে 4.4.2 findutils), আমি একটি ত্রুটি এই কমান্ড দিয়ে পাবেন: find: missing argument to `-mtime'। তবে আমি -mmin এবং দশমিক যুক্তি ব্যবহার করে পছন্দসই আচরণ পেতে পারি। sআর্গুমেন্ট হিসাবে ব্যবহার করার জন্য আমি ম্যানপেজে কোনও রেফারেন্স পাইনি ।
ডাঃ জিম্বোব

4
-60 এর দশকে কোনও বৈধ যুক্তি নয় -mtime। এমনকি পসিক্স বা জিএনইউ অনুসন্ধানে "60 এর দশক" এমনকি একটি বৈধ বিকল্প নয়। যুক্তি -mtimeহ'ল এমন একটি সংখ্যা যা কোনও ফাইল সংশোধিত হওয়ার আগে 24 ঘন্টা পর্যায়ক্রমে নির্দিষ্ট করে।
ড্যানিসাউয়ার

13

এমটাইম নির্দিষ্ট করে সেকেন্ড সহ সমাধানটি আমার লিনাক্স সিস্টেমে যে find --version== ব্যবহার করে তা কার্যকর করে না find (GNU findutils) 4.4.2

আমি নিম্নলিখিত ত্রুটি পেয়েছি:

mycomputer:~/new$ find . -mtime -60s
find: missing argument to `-mtime'
mycomputer:~/new$ find . -mtime -60seconds
find: missing argument to `-mtime'

তবে, আমি ব্যবহার করতে পারি -mmin(শেষ মুহুর্তের মধ্যে সংশোধিত জন্য), এবং এটি একটি দশমিক যুক্তিতে নিতে পারে; উদাহরণস্বরূপ, নিম্নলিখিত 30 সেকেন্ডে নিম্নলিখিত সংশোধিত ফাইলগুলি সন্ধান করে।

find . -mmin 0.5

সুতরাং উদাহরণস্বরূপ; গত 120 সেকেন্ডের জন্য, সর্বশেষ 1s, 6s, 11s, ... আগে ফাইলগুলি তৈরি করা, এই আদেশটি সন্ধান করে:

mycomputer:~/new$ for i in $(seq 1 5 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
mycomputer:~/new$ find . -mmin 0.5
.
./last_modified_1_seconds_ago
./last_modified_26_seconds_ago
./last_modified_11_seconds_ago
./last_modified_16_seconds_ago
./last_modified_21_seconds_ago
./last_modified_6_seconds_ago

সুতরাং আপনার যদি সত্যিই এটি প্রয়োজন হয় সেকেন্ডে আপনি এমন কিছু করতে পারেন:

localhost:~/new$ for i in $(seq 1 1 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
localhost:~/new$ N=18; find . -mmin $(echo "$N/60"|bc -l)
./last_modified_1_seconds_ago
./last_modified_9_seconds_ago
./last_modified_14_seconds_ago
./last_modified_4_seconds_ago
./last_modified_12_seconds_ago
./last_modified_13_seconds_ago
./last_modified_8_seconds_ago
./last_modified_3_seconds_ago
./last_modified_5_seconds_ago
./last_modified_11_seconds_ago
./last_modified_17_seconds_ago
./last_modified_16_seconds_ago
./last_modified_7_seconds_ago
./last_modified_15_seconds_ago
./last_modified_10_seconds_ago
./last_modified_6_seconds_ago
./last_modified_2_seconds_ago

8

গ্লেন যা বলেছিল তার অনুরূপ, আপনি যদি সমস্ত কিছু সংশোধিত সন্ধান করতে চান তবে বলুন, যে সময়ে কোনও ইনস্টলার প্রক্রিয়া চলমান ছিল, তেমন কিছু করা সহজ হতে পারে:

touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint

তারপরে আপনাকে সময় গণনা করতে হবে না; আপনি কেবল চেকপয়েন্ট ফাইলের পরে জিনিসগুলি পরিবর্তিত দেখতে পান।


6

আপনার যদি এমন কোনও সংস্করণ পাওয়া যায় যা এটি সমর্থন করে না -mtime -60sতবে আরও ভাল সমাধান

touch -d '-60 seconds' /tmp/newerthan
find . -name "*.txt" -newer /tmp/newerthan

6

এটি করার সহজ উপায় হ'ল:

find . -name "*.txt" -newermt '6 seconds ago'

-mtime -60sবিকল্প, একটি উত্তর উল্লেখ করা হয়েছে, অনেক সংস্করণ এ কাজ করে না find2016. এমনকি -newermtআমাদের কাছে অনেক ভালো বিকল্প। এটি অনেকগুলি বিভিন্ন তারিখ এবং সময় ফর্ম্যাটগুলি পার্স করতে পারে।

বিকল্প বিকল্পটি mminহ'ল:

find . -name "*.txt" -mmin -0.5

# Finds files modified within the last 0.5 minute, i.e. last 30 seconds

এই বিকল্পটি সমস্ত findসংস্করণের জন্য কাজ না করে ।


2
এটি স্পষ্টতই সেরা সমাধান।
rednoah


1

যদি আপনার সংস্করণটি findসেকেন্ড বা বাস্তব মানগুলি গ্রহণ না করে -mminতবে আমার মতো, ব্যবহার করুন , তবে 0 টি নির্দিষ্ট করুন এবং আপনি এক মিনিটেরও কম সময়ে সমস্ত ফাইল সংশোধন করতে পারবেন:

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