সম্পাদনা: আমার ধারণা এই পোস্টটি 'বিশেষত কার্যকর নয়' যেমনটি আমি ভেবেছিলাম। এটি একটি অতি দ্রুত সমাধান যা কেবলমাত্র সর্বাধিক সংশোধিত ফাইলের ট্র্যাক রাখে (ফাইলগুলির সম্পূর্ণ তালিকা বাছাইয়ের পরিবর্তে):
find . -type f -printf '%T@ %p\n' | awk 'BEGIN { mostrecenttime = 0; mostrecentline = "nothing"; } { if ($1 > mostrecenttime) { mostrecenttime = $1; mostrecentline = $0; } } END { print mostrecentline; }' | cut -f2- -d ' '
স্বচ্ছতার জন্য একাধিক লাইনে ছড়িয়ে দেওয়া নীচের মত দেখায়:
find . -type f -printf '%T@ %p\n' | awk '
BEGIN { mostrecenttime = 0; mostrecentline = "nothing"; }
{
if ($1 > mostrecenttime)
{ mostrecenttime = $1; mostrecentline = $0; }
}
END { print mostrecentline; }' | cut -f2- -d ' '
EDIT এর সমাপ্তি
একটি বিশেষ দরকারী পোস্ট নয় তবে যেহেতু 'অ্যারেঞ্জ' গতি নিয়ে আলোচনা করছিল, তাই আমি ভেবেছিলাম এটি ভাগ করে নিই।
অ্যারেজট এবং এনজোটিবের সমাধানগুলিতে ডিরেক্টরীতে সমস্ত ফাইলকে তাদের টাইমস এবং তারপরে বাছাইয়ের সাথে জড়িত। আপনি জানেন যে বাছাই সর্বাধিক সন্ধান করা প্রয়োজন হয় না। লিনিয়ার সময় সর্বাধিক সন্ধান করা যায় তবে বাছাইয়ের জন্য এন লগ (এন) সময় লাগে [আমি জানি পার্থক্যটি খুব বেশি নয় তবে এখনও রয়েছে;)]। আমি এটি বাস্তবায়নের একটি পরিষ্কার উপায় সম্পর্কে ভাবতে পারি না। [সম্পাদনা: একটি ঝরঝরে (নোংরা চেহারা সত্ত্বেও) এবং উপরে সরবরাহ করা দ্রুত বাস্তবায়ন]]
পরবর্তী সেরা জিনিস - কোনও ডিরেক্টরিতে সর্বাধিক সম্পাদিত ফাইল সন্ধান করতে, প্রতিটি স্তরের 1 উপ-ডিরেক্টরিতে পুনরাবৃত্তভাবে সর্বাধিক সম্পাদিত ফাইলটি সন্ধান করুন। এই ফাইলটি উপ-ডিরেক্টরিটি উপস্থাপন করুন। স্তর 1 সাবডাইরেক্টরিগুলির প্রতিনিধিদের সাথে স্তরের 1 ফাইলগুলি সাজান। প্রতিটি ডিরেক্টরিতে স্তরের 1 টি ফাইল এবং সাব-ডায়ারের সংখ্যা যদি প্রায় ধ্রুবক হয় তবে এই প্রক্রিয়াটি মোট ফাইলের সংখ্যার সাথে রৈখিকভাবে স্কেল করা উচিত।
এটিই এটিকে বাস্তবায়নের জন্য নিয়ে এসেছি:
findrecent() { { find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1; }
findrecent .
আমি এটি চালিয়েছি এবং একগুচ্ছ find: findrecent: No such file or directory
ত্রুটি পেয়েছি । কারণ: -সেক্স একটি ভিন্ন শেলের মধ্যে রান খুঁজে পাওয়া যায়। আমি .bashrc, .xsessionrc এ ফাইন্ডারেন্ট সংজ্ঞায়নের চেষ্টা করেছি তবে এগুলি সাহায্য করেনি [আমি এখানে সহায়তার প্রশংসা করি]। শেষ পর্যন্ত আমি নির্বাণ অবলম্বন
#!/bin/bash
{ find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1;
findrecent
আমার পাঠানো স্ক্রিপ্টে এবং তারপর এটি চালাচ্ছে।
আমি এটি দৌড়েছি, অপেক্ষায় আছি এবং কোনও আউটপুট ছাড়াই অপেক্ষা করতে থাকি। কেবলমাত্র নিশ্চিত হতেই আমি ফাইলটিতে যে কোনও অসীম লুপগুলি সংশোধন করেছি তার সাথে আমি व्यवहार করিনি
#!/bin/bash
echo "$1" >&2
{ find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1;
এবং আবার চেষ্টা। এটি কাজ করেছে - তবে আমার হোমফোল্ডারে 1 মিনিট 35 সেকেন্ড সময় নিয়েছে - অ্যারেঞ্জমেন্টের এবং এনজোটিবের সমাধানগুলি যথাক্রমে 1.69, 1.95 সেকেন্ড নিয়েছিল!
ও (এন) এর চেয়ে ও (এন লগ (এন)) এর শ্রেষ্ঠত্বের পক্ষে এত কি! অভিশাপ আপনি কল ওভারহেড ফাংশন! [বা বরং স্ক্রিপ্ট কল ওভারহেড]
তবে এই স্ক্রিপ্টটি পূর্বের সমাধানগুলির চেয়ে আরও ভাল স্কেল করে এবং আমি বাজি ধরি এটি গুগলের মেমরি ব্যাঙ্কে তাদের চেয়ে দ্রুত চলবে; ডি