মানব পাঠযোগ্য ফাইলের আকার বাছাই করা


16

আমি কীভাবে একটি মানব-পঠনযোগ্য ফাইল-আকার সারণি ব্যবহার করে একটি তালিকা বাছাই করতে পারি, যে আকারের শনাক্তকারী (জি, এম, কে) অ্যাকাউন্টে নেয় সেগুলি সংখ্যাসূচক সাজান? আমি du -shউদাহরণস্বরূপ " " আউটপুটটি বাছাই করতে পারি ?

সমস্যা: ফাইল / ফোল্ডার তালিকাভুক্ত করা এবং তাদের আকার অনুসারে বাছাইয়ের সমস্যা বিবেচনা করুন। আপনি চালিয়ে তা অর্জন করতে পারেন:

du -s * | sort -n

এটি তাদের আকার অনুসারে বাছাই করা ফাইল / ফোল্ডারগুলি তালিকাভুক্ত করে। তবে মুদ্রিত আকারের মানটি বাইটগুলিতে (বা মেগাবাইট, বা আপনি যদি চয়ন করেন তবে গিগাবাইট)।

মানব-পঠনযোগ্য মানগুলির ভিত্তিতে বাছাই করতে সক্ষম হওয়া বাঞ্ছনীয় হবে, তাই আমি কিছু উপমা চালাতে পারি

du -sh * | <human-readable file sort>

এবং ২.০ মেগাবাইটের পরে 1.5 জিবি ফোল্ডার প্রদর্শিত হবে।

উত্তর:


4

আফাইক, এটি করার জন্য কোনও মানক আদেশ নেই।

স্ট্যাক ওভারফ্লোতে যখন একই প্রশ্নটি জিজ্ঞাসা করা হয়েছিল তখন বিভিন্ন কর্মক্ষেত্র রয়েছে, যা নিয়ে আলোচনা করা হয়েছিল: আমি কীভাবে আকারের মাধ্যমে ডু-আউটপুটটি বাছাই করতে পারি?


29

জিএনইউ কোর্টিলস> = 7.5 ব্যবহার করুন:

ডু -হস * | সাজান -h

(এই সার্ভারফল্ট প্রশ্ন থেকে নেওয়া )

ম্যান পেজ

সম্পাদনা করুন: আপনি জিএনইউ সংস্করণ ব্যবহার করে du --versionএবং ব্যবহার করে আপনার সংস্করণগুলি পরীক্ষা করতে sort --versionপারেন। আপনি যদি হোমব্রু ব্যবহার করছেন তবে আপনার ব্যবহারের প্রয়োজন হতে পারে gduএবং gsort


8
ওএসএক্সের এই বিকল্প নেই। আপনি হোমব্রু ব্যবহার করতে পারেন brew install coreutils(যা একটি 'জি' দিয়ে সমস্ত কোর্টিল কমান্ড প্রিপেন্ড করে)। আপনি তারপর করতে পারেন gdu -hs * | gsort -h
dsummersl

1
কেবল @ dsummersl এর বিষয়টি স্পষ্ট করার জন্য: du -hs *ম্যাক ওএস এক্সে কাজগুলি দুর্দান্ত, তবে sort -hফিরে আসে sort: invalid option -- hএখানে বর্ণিত হিসাবে কেউ ম্যাকপোর্টের মাধ্যমে কোর্টিল প্যাকেজও ইনস্টল করতে পারে ।
jvriesem

3

আপনি যদি 1MB এর চেয়ে বড় ফাইলগুলি সম্পর্কে উদ্বিগ্ন হন তবে আপনার মনে হয় আপনি এই কমান্ডটি বাছাই করতে ব্যবহার করতে পারেন এবং আকারটি এমবিতে রূপান্তর করতে awk ব্যবহার করতে পারেন:

du -s * | sort -n | awk '{print int($1 / 1024)"M\t"$2}'

আবার এই মাপগুলি কাছের এমবিতে গোল করে। আপনি এটি আপনার পছন্দসই ইউনিটে রূপান্তর করতে পারেন।


এই অনুরূপ: du -sm * | sort -n-s/ -gতোলে duমেগাবাইটে / গিগাবাইট আউটপুট মাপ।
নোট করুন

এমবি এর জন্য আপনাকে আরও 1024 দিয়ে ভাগ করতে হবে। সুতরাং এটি হবেint($1 / (1024 * 1024))
প্রতীক খাদলোয়া

2

এটি একটি সাদা নাম বা অ্যাডোস্ট্রোফ সহ ফাইলের নামগুলি পরিচালনা করে এবং এমন সিস্টেমে কাজ করে যা সমর্থন করে না xargs -dবা sort -h:

du -s * | sort -n | cut -f2 | tr '\n' '\0' | xargs -0 -I {} du -sh "{}"

যার ফলাফল:

368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm

1

এখানে অন্য একটি:

$ du -B1 | sort -nr | perl -MNumber::Bytes::Human=format_bytes -F'\t' -lane 'print format_bytes($F[0])."\t".$F[1]'

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

$ cpan Number::Bytes::Human

প্রথম।


1

du -sk * | সাজানো-এন | awk '{মুদ্রণ $ 2}' | পড়ার সময় চ; do du -sh "$ f"; সম্পন্ন


1

এই কমান্ডটি এমবিতে আকার অনুসারে বাছাই করবে

du --block-size=MiB --max-depth=1 path | sort -n

এটি ইতিমধ্যে ব্যবহারকারী আসলে যা করছেন, তিনি / তিনি কেবল এমআইবির সাথে উদাহরণটি দেননি তবে এটি সম্পর্কে উল্লেখ করেছেন। তিনি / তিনি যা সন্ধান করছেন তা হ'ল -hপতাকাটি ডুতে ব্যবহার করার সময় বাছাই করতে সক্ষম হবেন ।
টনিন

0

আমি এখানেই শেষ করেছি যেহেতু আমি অন্য কিছু বাছাই করার চেষ্টা করছিলাম যা একই আউটপুটে এমবি এবং জিবি সমন্বিত হয়েছিল এবং আমি এটি নিয়ন্ত্রণ করতে পারিনি।

$NF#GBবা #MBপ্যাটার্নটি আউটপুটে সর্বশেষ কলাম হিসাবে ব্যবহৃত হয় :

somecommand | \
gawk '{
  if ($NF ~ /[0-9\.]+GB/) 
    { a=gensub(/([0-9\.]+)(GB)/,"\\1","g",$NF); \
    printf "%sMB\n", a*1024} \
  else {print $NF} 
}' | \
sort -n

Awk কমান্ডের ব্যাখ্যা:

if ($NF ~ /[0-9\.]+GB/)

যদি শেষ কলামটি রেজেক্স প্যাটার্নের সাথে মেলে যা একটি ডিজিট বা .এক বা একাধিকবার অনুসরণ করেGB

{ a=gensub(/([0-9\.]+)(GB)/,"\\1","g",$NF); \

তারপরে aপ্রতিটি লাইনের অঙ্কের অংশে পরিবর্তনশীল সেট করুন যা একই শেষ কলামে একই রেজেক্স প্যাটার্নের সাথে মেলে ( $NF)

printf "%sMB\n", a*1024} \

সেটিংস পরে a, printfআউটপুট হিসাবে বিন্যাস করতে ব্যবহার করুন${a*1024}MB

else {print $NF}

অন্যথায় কেবল শেষ কলামটি মুদ্রণ করুন

sort -n

আউটপুট এ সংখ্যার সাজানোর ব্যবহার


উদাহরণ

echo "4MB\n5GB\n420MB\n420GB\n1024MB\n1GB" | \                                                                                                                                 23:43:06 (EMP-2653/package-upgrades) Ø M
gawk '{
  if ($NF ~ /[0-9\.]+GB/)
    { a=gensub(/([0-9\.]+)(GB)/,"\\1","g",$NF); \
    printf "%sMB\n", a*1024} \
  else {print $NF}
}' | \
sort -n

আমি নিশ্চিত যে রেইগেক্স প্যাটার্নটি পুনরায় ব্যবহার করার একটি উপায় আছে তাই আমি কেবল একবার ম্যাচটি সম্পাদন করে তার জায়গায় প্রতিস্থাপন করছি তবে আমি কীভাবে এটি করব তা এখনও জানি না :)

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