তারিখ অনুসারে বাছাই করা ফাইলগুলি {আকার} এর চেয়ে বড় List


27

আমি সমস্যাটি সমাধান করতে চাই 'বর্তমান ডিরেক্টরিতে 20 এমবি-র উপরে শীর্ষ 10 শীর্ষস্থানীয় ফাইলগুলির তালিকা করুন'।

সাথে lsআমি করতে পারি:

ls -Shal |head

শীর্ষস্থানীয় 10 বৃহত্তম ফাইলগুলি পেতে এবং:

ls -halt |head

শীর্ষ 10 টি সাম্প্রতিক ফাইলগুলি পেতে

সন্ধানের সাথে আমি এটি করতে পারি:

find . -size +20M

বর্তমান ডিরেক্টরিতে 20MB এর বেশি সমস্ত ফাইলের তালিকা করতে (এবং সাব-ডিরেক্টরিগুলি, যা আমি চাই না)।

সর্বাধিক সাম্প্রতিকতম ফাইলগুলিকে একটি নির্দিষ্ট আকারের তালিকায় রাখার কোনও উপায় আছে lsকীভাবে?

উত্তর:


24

'বর্তমান ডিরেক্টরী' এর জন্য বিকল্প findনেই -maxdepth 1। আপনার প্রয়োজনের পুরো কমান্ডলাইনটি হ'ল:

find . -maxdepth 1 -type f -size +20M -print0 | xargs -0 ls -Shal | head

অথবা

find . -maxdepth 1 -type f -size +20M -print0 | xargs -0 ls -halt | head

8

দ্রষ্টব্য: এটি জিএনইউ-ফাইন্ডের জন্য কাজ করবে তবে অন্য প্রতিটি সন্ধান নয়।

find . -maxdepth 1 -size +20M -printf "%T@ %f\n" | 
    sort -nr | head -n 20 | sed 's/[^ ]\+ //'

@ রাজেশের মতো শুরু হচ্ছে তবে আউটপুট ফর্ম্যাটটি নির্দিষ্ট করতে printfকমান্ডটি ব্যবহার করুন find। এখানে আছে 3 সময় সংশ্লিষ্ট ফরম্যাটের হয় atime, ctime এবং র দ্বারা mtime - %Tর দ্বারা mtime জন্য, %Aএবং %Cঅন্যান্য ফরম্যাটের জন্য।

@যুগের পর থেকে সেকেন্ডে টাইমফর্মটি নির্দিষ্ট করা। 2 ফাইলের মধ্যে একটি নতুন লাইনের %fজন্য, ফাইলের নামের জন্য \n

তারপরে বিপরীত ক্রমে সংখ্যায় অনুসারে বাছাই করা প্রথমে কনিষ্ঠতম ফাইল দেয় এবং আমরা 20 টি লাইন নিয়ে যাই head

শেষ পর্যন্ত, sedসময় তথ্য নিক্ষেপ করতে ব্যবহৃত হয়।

¹) যেহেতু headএকের পর এক লাইনে কাজ করা হয়, নামে 20 টিরও বেশি নিউলাইন সহ একটি ফাইল যা কিছুটা অস্বাভাবিক তবে নিষিদ্ধ নয়, যদি প্রথম 20 ম্যাচ হয় তবে আউটপুটটিকে দূষিত করতে পারে। আপনার যদি এ জাতীয় ফাইলগুলি ঘটে থাকে তবে দয়া করে এগুলি থেকে মুক্তি দেওয়ার চেষ্টা করুন - ভাল, তাদের নাম পরিবর্তন করার জন্য। এগুলি প্রায়শই সরল স্ক্রিপ্টগুলির জন্য সমস্যা হবে।


1
আপনি ব্যবহার করেন তাহলে fileএর -lsকমান্ড বিশেষ অক্ষর ব্যাকস্ল্যাশ-পলান অক্ষর হিসাবে প্রিন্ট করা হবে: find . -maxdepth 1 -size +20M -printf "%T@ " -ls | sort -nr | head -n 20 | sed 's/[^ ]\+ //'। অতিরিক্তভাবে ফর্ম্যাটটি দেখতে হবে ls -l, ইওগানএম -lযেভাবেই নির্দিষ্ট করে ।
manatwork

printfকেবলমাত্র নির্দিষ্ট জিএনইউ বিতরণের জন্য কাজ করে।
ব্রেথ্লোজে

%T+মানুষের পাঠযোগ্য টাইমস্ট্যাম্পগুলি তৈরি করে 2018-11-06+13:37:54.4606466460যা এগুলি sort(বিনা দ্বারা -n) অনুসারে বাছাইযোগ্য
সান্তিলি

5

জেডশ এর গ্লোব কোয়ালিফায়াররা এটি সহজ করে তোলে। .কোয়ালিফায়ার নির্বাচন শুধুমাত্র নিয়মিত ফাইল, Lm+20নির্বাচন যে ফাইল অন্তত 20MB প্লাস এক বাইট দীর্ঘ হয়; সঠিকভাবে 20MB দীর্ঘ ফাইলগুলি অন্তর্ভুক্ত করতে, ব্যবহার করুন L+20971519। তারপরে omপরিবর্তনের সময় হ্রাস করে বাছাই করে এবং [1,10]প্রারম্ভিক 10 টি ম্যাচে সীমাবদ্ধ করে। আপনার যদি এখনও তারিখ অনুসারে ফাইলগুলি তালিকাবদ্ধ করতে চান তবে আপনার -tবিকল্পের প্রয়োজন আছে ls; অথবা আপনি ফাইলগুলি অন্য কোনও কমান্ডে (প্রথম কনিষ্ঠ) পাস করতে পারেন। প্রথমে পুরানো ফাইলের সাথে ফাইলগুলি অন্য কমান্ডে পাস করার জন্য, Omপরিবর্তনের সময় বাড়িয়ে বাছাই করুন এবং [-10,-1]শেষ 10 টি মিল খুঁজে বের করুন।

ls -ltr -- *(.Lm+20om[1,10])
echo *(.Lm+20Om[-10,-1])

2

আমি মনে করি সমস্যাটি সমাধানের এটি সর্বোত্তম উপায় হতে পারে ...

find . -maxdepth 1 -type f -size +20M -exec ls -Shal {} \+ | head

যে কোনও ত্রুটি থেকে মুক্তি পাওয়ার জন্য এমন ফাইলগুলি অ্যাক্সেস করার চেষ্টা করে যা আপনাকে পড়ার অনুমতি নেই যা আপনি যুক্ত করতে চান

find . -maxdepth 1 -type f -size +20M -exec ls -Shal {} \+ 2> /dev/null | head 

1

ফাইলের নামগুলিতে এম্বেড করা নতুন লাইন অক্ষর নির্বিশেষে এটি কেবলমাত্র নির্দিষ্ট 10 টি ফাইল মুদ্রণ করবে। এটি ফাইল সিস্টেম ব্যবহার করেinodes

cd "$1"
for i in $(find . -maxdepth 1 -type f -size +20M -printf "%T@\t%i\n" \ 
           | sort -nr | head | cut -f 2)
do
  ls -l "$(find . -inum $i)"
done

-1

সবগুলো উত্তরের জন্য ধন্যবাদ। আমি যা যা করেছি তা নিম্নলিখিত:

ls -halt | grep "M " |head

যদিও এটি কোনও মেগাবাইটের (এবং একটি গিগাবাইটের অধীনে) কোনও কিছুর পক্ষে 20 মেগাবাইট বিস্মৃত হয়, তবে ফাইলাইজের মানব পাঠযোগ্য উপাদানটি মনে রাখা সহজ এবং সংরক্ষণ করা সহজ।


4
আপনার আউটপুট বিশ্লেষণ করার চেষ্টা করা উচিত নয়ls , এটি আপনাকে ফাইলগুলির উপস্থাপনা দেখায়, আরও কিছু না। সরল ফাইলের নামের জন্য, আউটপুটটি বেশিরভাগ ক্ষেত্রে ফাইল নামের সমতুল্য হয়, তবে আপনার উপর নির্ভর করা উচিত নয়।
ক্রিস ডাউন

এটি সত্য আমি নিশ্চিত, তবে একজন মানব ব্যবহারকারীর নিরিখে (এবং অন্য কোথাও আউটপুট পাইপ করা হচ্ছে না), এটি সহজেই মনে রাখা সহজ কারণ এটি পরিচিত সহজ সরঞ্জামগুলি থেকে আরও সহজে একসাথে রাখা যেতে পারে tldp.org/LDP/GNU-Linux- সরঞ্জাম-সংক্ষিপ্ত / html / c1089.htm
EoghanM
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.