সময় অনুসারে বাছাই করা ডিরেক্টরিতে 100 প্রথম ফাইল তালিকাভুক্ত করার সর্বোত্তম উপায়


12

তৈরি টাইমস্ট্যাম্প (প্রাচীনতম প্রথম) দ্বারা বাছাই করা ডিরেক্টরিতে 100 টি প্রথম ফাইল তালিকাভুক্ত করার সর্বোত্তম উপায় কী হবে। ডিরেক্টরিটি বেশ বড় (প্রায় 100000 ফাইল)।

পাইপ থেকে মাথা ভয়াবহ দীর্ঘ সময় সম্পন্ন করতে সময় লাগে।

সম্পাদনা:

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


1
যদি এটি একটি ক্লিন-আপ অপারেশন হয়, তবে আপনি যা চান তা কেবল find -mtime +<number of days> -deleteএকটি নির্দিষ্ট বয়সের চেয়ে পুরানো সমস্ত ফাইল পরিষ্কার করা। এর অর্থ কোনও প্রকারের প্রয়োজন নেই।
মাইকেল

উত্তর:


14

আপনি বলতে যে, " জন্য বাঁশি বাজালাম মাথা সম্পূর্ণ একটি ভয়াবহ দীর্ঘ সময় লাগে।"

এর কারণটি নয় ls, তবে আপনার ডিরেক্টরিতে থাকা ফাইলগুলির সংখ্যা। যদি আপনার একক ডিরেক্টরিতে ১০০,০০০ ফাইল থাকে তবে এই সমস্যাটি সমাধানের যে কোনও উপায়ে এটি বাছাই করা বা কোনও আউটপুট মুদ্রণের বিষয়ে চিন্তা করার আগে সমস্ত 100,000 ফাইল সম্পর্কে তথ্য পেতে হবে।

যদি এটি খুব বেশি সময় নেয় তবে আসল সমাধানটি হ'ল ফাইলগুলি একাধিক ডিরেক্টরিতে বিভক্ত করা।

আপনি যদি বেশ কয়েকটি ডিরেক্টরিতে ফাইলগুলি ছড়িয়ে দিতে না পারেন, তবে বিবেচনা করার জন্য ফাইলগুলির সংখ্যা সঙ্কুচিত করার কোনও উপায় আছে কি ? উদাহরণস্বরূপ, যদি ফাইলের নামগুলিতে একটি তারিখ অন্তর্ভুক্ত থাকে তবে সম্ভবত আপনি একটি ওয়াইল্ডকার্ড অন্তর্ভুক্ত করতে পারেন যাতে সিস্টেমকে 100,000 ফাইল বাছাই করতে না হয়। অথবা তারা ক্রমান্বয়ে সংখ্যাযুক্ত? (এটি সাহায্য করতে পারে বা নাও পারে তবে এটি চেষ্টা করার মতো)

আপনি কতবার এটি করার চেষ্টা করছেন? আবার এটি পুনরায় ব্যবহারের জন্য আউটপুট সংরক্ষণ / ক্যাশে করা উপযুক্ত


এখন, একটি প্রশ্ন।

তুমি নিশ্চিত আপনি কি বলতে চান "সৃষ্টি সময় 'এবং" পরিবর্তন সময়' ? বেশিরভাগ সরঞ্জাম কেবল "পরিবর্তনের সময়" প্রদর্শন করতে পারে, "তৈরির সময়" নয়।

"ক্রিয়েশন টাইম" পাওয়া খুব নতুন জিনিস, যার জন্য একটি ext4 ফাইল সিস্টেম প্রয়োজন এবং কিছু সরঞ্জাম যা ইনস্টল করা সহজ নয়।


চাইলে সময় বদলান

পরিবর্তনের সময় (সংক্ষেপে সিটিটাইম) এর অর্থ ফাইলের বৈশিষ্ট্যগুলি সর্বশেষ পরিবর্তিত হওয়া সময় time

ls -c সিটাইম দ্বারা বাছাই।

আপনি আউটপুটটি আরোহী ক্রমে চান, উতরাই নয়, তাই -rবিকল্পের সাথে আপনাকে আউটপুটও বিপরীত করতে হবে।

সুতরাং আপনি এটি এইভাবে করতে পারে:

ls -cr | head -n 100

ব্যবহার করে একই সমস্যার দীর্ঘতর সমাধান stat:

find . -mindepth 1 -maxdepth 1 -exec stat -c $'%Z\t%n' '{}' \; |
    sort -k 1n |
    cut -f 2 -d $'\t' |
    head -n 10 |
    sed -e 's/^\.\///'

তবে ls -crএটি আমার সিস্টেমের চেয়ে ধীর গতিতে চলে ।


আপনি চান সময় পরিবর্তন

পরিবর্তনের সময় (সংক্ষিপ্ততার জন্য এমটাইম) অর্থ ফাইলের বিষয়বস্তু সর্বশেষ পরিবর্তিত হওয়া সময়।

ls -t মাইটাইম অনুসারে বাছাই করে।

পরিবর্তন ls -crকরার জন্য ls -tr(ভাল বিকল্প) অথবা পরিবর্তন stat -c $'%Z\t%n'করার জন্য stat -c $'%Y\t%n'


আপনার প্রয়োজন সময় সৃষ্টি

(সংক্ষিপ্ত জন্য crtime)

এটা শক্ত।

প্রথমে ডিরেক্টরিটি কোনও ফাইল সিস্টেমে রয়েছে তা ব্যবহার করে ফর্ম্যাট করা হয়েছে তা নিশ্চিত করুন ext4। আপনি এটি tune2fs -l <device name>পরীক্ষা করতে ব্যবহার করতে পারেন ।

তারপরে, একটি নতুন statবিন্যাস বলা হয় %W, যা আপনাকে এখানে সহায়তা করতে পারে। এটি পেতে, আপনাকে অক্টোবর ২০১০ বা তার পরে প্রকাশিত জিএনইউ কোরিটিলসের একটি সংস্করণ ডাউনলোড করতে হবে, এটি এক্সট্রাক্ট করতে হবে, এটি সংকলন করতে হবে এবং ইনস্টল করতে হবে।

তারপরে, আপনার কার্নেলের উপর নির্ভর করে এটি কাজ করতে পারে (এটি চেষ্টা করে না)।

find . -mindepth 1 -maxdepth 1 -exec stat -c $'%W\t%n' '{}' \; |
    sort -k 1n |
    cut -f 2 -d $'\t' |
    head -n 10 |
    sed -e 's/^\.\///'

আরো দেখুন:


যদি আপনি সম্পর্কে ত্রুটি পেতে "'$\t'

'$\t'স্বরলিপি প্রয়োজন bashবা zsh: এটা কাজ করবে না dashবা shউবুন্টু উপর। আপনি সত্যিই যারা শাঁস ব্যবহার করতে হবে, তাহলে আপনি যেকোনো পরিবর্তন করতে হবে \tকরতে Ctrl+ + V, Tabএবং নেতৃস্থানীয় অপসারণ $শুধু উদ্বোধনী উদ্ধৃতি আগে থেকে।


এটা সম্ভবত তিনি ext4 চলছে না। আমি আমার সমস্ত মেশিনে উবুন্টু 10.04 চালাই, তবে বেশ কয়েকটি ড্রাইভে জেএফএস চালাচ্ছি। আফাইক জেএফএস তৈরির সময় স্ট্যাম্প সমর্থন করে।
জর্নার্নি

প্রকৃতপক্ষে. আমরা জানি যে এটি ext3- তে সমর্থিত নয় এবং এটি ext4- এ সমর্থিত। একটি দ্রুত অনুসন্ধানে এটি zfs, বা ফ্রিবিএসডি ইউএফএসের সাথে কাজ করতে পারে তা বোঝায়, তবে উবুন্টুতে এগুলির কোনওটিই সাধারণ নয়! জেফএস বা এক্সএফএস বা অন্য কিছু সম্পর্কে নিশ্চিত নয়। আপনি তথ্য / লিঙ্কগুলি খুঁজে পেতে পারলে আরও শুনে খুশি হবেন।
মাইকেল

সেই বিস্তৃত উত্তরের জন্য এবং আরও নির্দিষ্ট প্রশ্ন লেখার জন্য সূক্ষ্ম অনুস্মারকের জন্য আপনাকে ধন্যবাদ;) "সন্ধান করুন" একটি বিজয়ী পারফরম্যান্স অনুসারে পরিণত হয়েছে, fs- টাইপটি ext3 হিসাবে পরিণত হয়েছে।

2

আজ অন্য জিনিসগুলি খুঁজে পাওয়া গেলে আপনার কার্য সম্পাদনের সমস্যার সাথে প্রাসঙ্গিক হতে পারে:

I=0; ls -cr /dir/ | while read file; do I=`expr $I + 1`; echo "$file"; if [ $I == 100 ]; then break; fi; done

এটিকে তাত্ত্বিকভাবে অনেক দ্রুত আউটপুট করা শুরু করা উচিত তবে আমি অনুমান করি যে ল্যাগটি কোথা থেকে আসছে depends lsফাইলগুলি বাছাই করতে এটি দীর্ঘ সময় নিতে পারে।


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