আপনি আকারের মাধ্যমে ডু আউটপুটটিকে কীভাবে সাজান?


196

আপনি কিভাবে du -sh /dir/*আকার অনুসারে বাছাই করবেন ? আমি এমন একটি সাইট পড়েছি যা ব্যবহার বলেছিল | sort -nতবে এটি অবশ্যই সঠিক নয়। এখানে একটি উদাহরণ যা ভুল।

[~]# du -sh /var/* | sort -n
0       /var/mail
1.2M    /var/www
1.8M    /var/tmp
1.9G    /var/named
2.9M    /var/run
4.1G    /var/log
8.0K    /var/account
8.0K    /var/crash
8.0K    /var/cvs
8.0K    /var/games
8.0K    /var/local
8.0K    /var/nis
8.0K    /var/opt
8.0K    /var/preserve
8.0K    /var/racoon
12K     /var/aquota.user
12K     /var/portsentry
16K     /var/ftp
16K     /var/quota.user
20K     /var/yp
24K     /var/db
28K     /var/empty
32K     /var/lock
84K     /var/profiles
224M    /var/netenberg
235M    /var/cpanel
245M    /var/cache
620M    /var/lib
748K    /var/spool


গৃহীত উত্তরটি sort -hআমার জন্য উবুন্টু 16.04 এলটিএসে আগস্ট 2017-এ কাজ করেছিল First প্রথম আমি আমার মাউন্ট করা ড্রাইভটি পাই cd /mnt(ইউএসইউটি fstab দ্বারা মাউন্ট করা) দ্বারা। তারপরে আমি তখন তা করি du >~/dumnt.out তবে sort -h ~/dumnt.out >~/dumntsort.outবৃহত্তম স্পেস হোগ দেখতে আমি nts লেজ ~ / dumntsort.out করতে পারি।
এসডসোলার

উত্তর:


252

আপনার যদি জিএনইউ কোর্টিল (বেশিরভাগ লিনাক্স বিতরণে সাধারণ) থাকে তবে আপনি এটি ব্যবহার করতে পারেন

du -sh -- * | sort -h

-hবিকল্প বলে sortযে ইনপুট পাঠযোগ্য ফরম্যাট (একক সঙ্গে সংখ্যা; 1024-ভিত্তিক যাতে 1023 কম 1K যা মেলে কি গনুহ ঘটবে বলে মনে করা হয় du -hনা)।

এই বৈশিষ্ট্যটি অগন ২০০৯ এ জিএনইউ কোর ইউটিলিটিগুলি .5.৫ এ যুক্ত করা হয়েছিল

বিঃদ্রঃ:

আপনি যদি ম্যাক ওএসএক্স-এর কোনও পুরানো সংস্করণ ব্যবহার করছেন তবে আপনাকে u দিয়ে কোর্টিলগুলি ইনস্টল করতে হবে brew install coreutilsতারপরে gsortড্রপ-ইন প্রতিস্থাপন হিসাবে ব্যবহার করতে হবে sort

ম্যাকোসের নতুন সংস্করণগুলি (মোজভেভে যাচাই করা হয়েছে) sort -hস্থানীয়ভাবে সমর্থন করে।


27
দ্রষ্টব্য: -rবাছাই করতে যোগ করুন , আপনি যদি শীর্ষে
বড়গুলি

9
ওএসএক্স-এ আপনি আপনার আরসি ফাইলটিতে বিন ফোল্ডারটি coreutilsমাধ্যমে ইনস্টল করতে পারেন এবং এটি উপলব্ধ থাকতে হবে। brewPATH-h
কেনারব

ওহ - - অনুস্মারকটির জন্য আপনাকে ধন্যবাদ। এর অর্থ tailহোগগুলি দেখতে আমার কমান্ডের দরকার নেই ।
এসডিসোলার

47

মানব-পঠনযোগ্য ব্যবহারের জন্য 1 কে ব্লক ইন্টেড গণনা করার জন্য-কে পতাকা ব্যবহার করে দেখুন। তারপরে, আপনার একটি সাধারণ ইউনিট রয়েছে এবং সহজেই একটি সংখ্যাযুক্ত বাছাই করতে পারেন।

du -ck | sort -n

আপনার স্পষ্টভাবে মানব ইউনিটগুলির প্রয়োজন নেই, তবে আপনি যদি তা করেন তবে তা করার অনেকগুলি উপায় রয়েছে। অনেকে উপরের 1K ব্লক কৌশলটি ব্যবহার করেছেন বলে মনে হয় এবং তারপরে ডুতে দ্বিতীয় কল করে।

https://serverfault.com/questions/62411/how-can-i-sort-du-h-output-by-size

আপনি যদি কেবি ইউনিট যুক্ত দেখতে চান তবে ব্যবহার করুন:

du -k | sed -e 's_^\([0-9]*\)_\1 KB_' | sort -n

2
আমার যে ফলাফলগুলি প্রয়োজন তা পেতে অন্য কিছু ইনস্টল না করা ভালো
তারানাকি

16

আপনি যদি একটি না থাকে তাহলে গনুহ coreutils এর সাম্প্রতিক সংস্করণ , আপনি কল করতে পারেন duছাড়া -hবাছাইযোগ্য আউটপুট পেতে, এবং একটি সামান্য postprocessing মানুষের বান্ধব আউটপুট উত্পাদন। আপনার সংস্করণটিতে পতাকা duনা থাকলেও এটি কাজ করার সুবিধা রয়েছে -h

du -k | sort -n | awk '
    function human(x) {
        if (x<1000) {return x} else {x/=1024}
        s="kMGTEPZY";
        while (x>=1000 && length(s)>1)
            {x/=1024; s=substr(s,2)}
        return int(x+0.5) substr(s,1,1)
    }
    {gsub(/^[0-9]+/, human($1)); print}'

আপনি যদি এসআই প্রত্যয়গুলি (1024 এর চেয়ে 1000 এর গুণক) চান তবে whileলুপের শরীরে 1024 থেকে 1000 পরিবর্তন করুন । (নোট করুন যে শর্তে 1000 টি উদ্দেশ্য, যাতে আপনি উদাহরণস্বরূপ 1Mপরিবর্তে পান 1000k))

যদি আপনার duকাছে বাইট আকারে মাপ প্রদর্শন করার বিকল্প থাকে (উদাঃ -bঅথবা -B 1- নোট করুন যে এটিতে ডিস্ক ব্যবহারের পরিবর্তে প্রকৃত ফাইলের আকারগুলি গণনা করার পার্শ্ব প্রতিক্রিয়া থাকতে পারে), s(ie s=" kMGTEPYZ";) এর শুরুতে একটি স্থান যুক্ত করুন, বা if (x<1000) {return x} else {x/=1024}এর শুরুতে যুক্ত করুন humanফাংশন।

1-10 সীমাতে সংখ্যার জন্য দশমিক অঙ্ক প্রদর্শন পাঠকের কাছে অনুশীলন হিসাবে ছেড়ে দেওয়া হয়েছে।


লিনাক্স এবং ম্যাক উভয় ক্ষেত্রেই আমি খুঁজে পেয়েছি বাক্স সমাধানের মধ্যে এটিই ছিল। অনেক ধন্যবাদ!
ব্রায়ান গ্রাহাম 21

9

আপনার যদি না থাকে তবে sort -hআপনি এটি করতে পারেন:

du -sh * | sed 's/\([[:digit:]]\)\t/\1B\t/' | sed 's/\(.\t\)/\t\1/' | sed 's/G\t/Z\t/' | sort -n -k 2d,2 -k 1n,1 | sed 's/Z\t/G\t/'

এটি ডু তালিকা পেয়েছে, প্রত্যয়টি পৃথক করে এবং এটি ব্যবহার করে বাছাই করে। যেহেতু <1K এর কোনও প্রত্যয় নেই তাই প্রথম সেড একটি বি যুক্ত করে (বাইটের জন্য)। দ্বিতীয় সেড অঙ্ক এবং প্রত্যয়টির মধ্যে একটি সীমানা যুক্ত করে। তৃতীয় শেড G কে জেড এ রূপান্তর করে যাতে এটি এম এর চেয়ে বড় হয়; আপনার যদি টেরাবাইট ফাইল থাকে, আপনাকে G কে Y এবং T কে Z তে রূপান্তর করতে হবে Finally


দুর্দান্ত প্রচেষ্টা, কিন্তু এটি আমার পক্ষে কাজ করার কাছাকাছি আসে না।
jvriesem

6

OS X এর, আপনি মাধ্যমে প্রয়োজনীয় coreutils ইনস্টল করতে পারেন Homebrew :

brew install coreutils

এটির সাথে gsortআপনার -hকমান্ড লাইন প্যারামিটার অন্তর্ভুক্ত থাকবে ।


4

এই ছোট্ট পার্ল স্ক্রিপ্টটি কৌশলটি করে। এটি duh(বা আপনি যা চান) হিসাবে সংরক্ষণ করুন এবং এটি দিয়ে কল করুনduh /dir/*

#!/usr/bin/perl -w
use strict;

my @line;

sub to_human_readable {
        my ($number) = @_;
        my @postfix = qw( k M G T P );
        my $post;
        my $divide = 1;
        foreach (@postfix) {
                $post = $_;
                last if (($number / ($divide * 1024)) < 1);
                $divide = $divide * 1024;
        }
        $number = int($number/$divide + 0.5);
        return $number . $post;
}

sub trimlengthright {
        my ($txt, $len) = @_;
        if ( length($txt) >= $len ) {
                $txt = substr($txt,0,$len - 1) . " ";
        } else {
                $txt = $txt . " " x ($len - length($txt));
        }
        return $txt;
}

sub trimlengthleft {
        my ($txt, $len) = @_;
        if ( length($txt) >= $len ) {
                $txt = substr($txt,0,$len - 1) . " ";
        } else {
                $txt = " " x ($len - length($txt)) . $txt;
        }
        return $txt;
}

open(DF,"du -ks @ARGV | sort -n |");
while (<DF>) {
        @line = split;
        print &trimlengthleft(&to_human_readable($line[0]),5)," "; # size
        print &trimlengthright($line[1],70),"\n"; # directory
}
close DF;

4

যেহেতু ম্যাক ওএস এক্সের -hবিকল্প নেই sort, তাই আমি চেষ্টা করে শিখেছি sedএবং awkপ্রথম চেষ্টা করেছি:

du -sk * | sort -g | awk '{ numBytes = $1 * 1024; numUnits = split("B K M G T P", unit); num = numBytes; iUnit = 0; while(num >= 1024 && iUnit + 1 < numUnits) { num = num / 1024; iUnit++; } $1 = sprintf( ((num == 0) ? "%6d%s " : "%6.1f%s "), num, unit[iUnit + 1]); print $0; }'

এটি একটি দীর্ঘ লাইন। প্রসারিত, এটি হল:

du -sk * | sort -g | awk '{ 

    numBytes = $1 * 1024; 
    numUnits = split("B K M G T P", unit); 
    num = numBytes; 
    iUnit = 0; 

    while(num >= 1024 && iUnit + 1 < numUnits) { 
        num = num / 1024; 
        iUnit++; 
    } 

    $1 = sprintf( ((num == 0) ? "%6d%s " : "%6.1f%s "), num, unit[iUnit + 1]);
    print $0; 

}'

আমি ম্যাক ওএস এক্স ম্যাভারিকস, জোসেমাইট, উবুন্টু 2014-04 এ awkএটি ডিফল্ট awk(যা nawkউভয় কারণ awkএবং nawkনির্দেশিত /usr/bin/mawk) বা গোকের সাথে চেষ্টা করেছি এবং তারা সকলেই কাজ করেছিল।

এখানে ম্যাকের আউটপুটটির একটি নমুনা দেওয়া হল:

     0B  bar
     0B  foo
   4.0K  wah
  43.0M  Documents
   1.2G  Music
   2.5G  Desktop
   4.7G  Movies
   5.6G  VirtualBox VMs
   9.0G  Dropbox
  11.7G  Library
  21.2G  Pictures
  27.0G  Downloads

পরিবর্তে du -sk *, আমি @ স্টিফানের উত্তরে দেখেছি যেখানে গ্র্যান্ড টোটালটিও প্রদর্শিত হয় এবং কোনও ফাইল সিস্টেমের মাউন্ট পয়েন্টকে অনুসরণ না করে ব্যবহার করেdu -skcx *


1

আমি উবুন্টু 10.04, সেন্টোস 5.5, ফ্রিবিএসডি এবং ম্যাক ওএস এক্সে যা ব্যবহার করি তা এখানে's

আমি ধারণাটি www.geekology.co.za/ এবং Earthinfo.org , পাশাপাশি ও'রিলির "লিনাক্স সার্ভার হ্যাকস" থেকে কুখ্যাত হাঁস ধার নিয়েছি । আমি এখনও এটি আমার প্রয়োজনের সাথে খাপ খাইয়ে নিচ্ছি। এটি এখনও একটি কাজ চলছে (যেমন, আমি এই সকালে ট্রেনে এই কাজ করছিলাম was):

#! /usr/bin/env bash
ducks () {
    du -cks -x | sort -n | while read size fname; do
        for unit in k M G T P E Z Y; do
            if [ $size -lt 1024 ]; then
                echo -e "${size}${unit}\t${fname}"
                break
            fi
            size=$((size/1024))
        done
    done
}
ducks > .ducks && tail .ducks

এখানে ফলাফল:

stefan@darwin:~ $ ducks
32M src
42M .cpan
43M .macports
754M    doc
865M    Work
1G  .Trash
4G  Library
17G Downloads
30G Documents
56G total

stefan@darwin:~ $

আমার মনে হয় তুমি বোঝাতে চাইছ du -cks -x *? (
নক্ষত্রের

এই ব্যবহারের ক্ষেত্রে অ্যাসিটার্কটি অপ্রয়োজনীয়। একবার চেষ্টা করে দেখো.
স্টিফান লাসিউইস্কি

আপনার মানে কি কোডের প্রথম সেটটিকে একটি ফাইল বলা হয় ducksএবং তারপরে chmod a+x ducksএবং তারপরে ./ducksএটি চালানোর জন্য ব্যবহার করেন? তারপরে আমি কেবল ম্যাক ওএস এক্স এবং উবুন্টু 2014-10 উভয়তেই মোট ডিস্কের ব্যবহার দেখতে পাচ্ছি। আমি ducks() { ...}সংজ্ঞাটিও এর মধ্যে রাখার চেষ্টা করেছি .bashrcএবং তারপরে ducksএটি চালানোর জন্য ব্যবহার করব এবং ম্যাক ওএস এক্সে একই জিনিসটি কেবল গ্র্যান্ড
টোটালটি দেখুন

1

এই লিপিটি নিয়ে পাগল হয়ে যান -

$du -k ./* | 
> sort -nr |
> awk '
> {split("KB,MB,GB",size,",");}
> {x = 1;while ($1 >= 1024) {$1 = $1 / 1024;x = x + 1} $1 = sprintf("%-4.2f%s", $1, size[x]); print $0;}'

1

জিএনইউয়ের অনুপস্থিতিতে, sort -hএটি বেশিরভাগ ইউনিক্স পরিবেশে কাজ করা উচিত:

join -1 2 -2 2 <(du -sk /dir/* 2>/dev/null | sort -k2,2) <(du -sh /dir/* 2>/dev/null | sort -k2,2) | sort -nk2,2 | awk '{ print $3 "\t" $1 }'

0

এটি একটি সাদা নাম বা অ্যাডোস্ট্রোফ সহ ফাইলের নামগুলি পরিচালনা করে এবং এমন সিস্টেমে কাজ করে যা সমর্থন করে না 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

0

এটি আকারের ক্রম হ্রাস করে আউটপুটটিকে সাজিয়ে রাখবে:

du -sh /var/* | sort -k 1rn

এটি আকারের ক্রম বাড়িয়ে আউটপুটটিকে সাজিয়ে রাখবে:

du -sh /var/* | sort -k 1n

PS: এটি যে কোনও কলাম অনুসারে বাছাই করতে ব্যবহার করা যেতে পারে তবে সেই কলামের মান একই ফর্ম্যাটে হওয়া উচিত


1
নং sort -k1rnএর সমতুল্য sort -rnএবং প্রতিটি লাইনের দশমিক অঙ্কের প্রাথমিক ক্রমের উপর ভিত্তি করে কেবল সাংখ্যিকভাবে সাজানো। এটা তোলে ফ্লোটিং পয়েন্ট বোঝে না, এবং এটি বোঝে না k, M, G... প্রত্যয়। 10.1 কে 1.23G এর চেয়ে বড় হিসাবে বিবেচনা করা হবে
স্টাফেন চেজেলাস

0

সোলারিসের পরীক্ষা!

du -kh | sort -nk1 | grep [0-9]K && du -kh | sort -nk1 | grep [0-9]M && du -kh | sort -nk1 | grep [0-9]G

এটি সমস্ত ডিরেক্টরি আকারগুলি পুনরাবৃত্তভাবে আউটপুট দেবে, নীচে গিগাবাইটের বৃহত্তম ডিরেক্টরি এবং কিলোবাইটে শীর্ষতম বৃহত্তম হবে।


0

সবচেয়ে বড়টি নীচে রয়েছে:

du -sh * | sort -h

0

COMMAND:

du -ah . | sort -k1 -h | tail -n 50

ব্যাখ্যা:

  • সমস্ত পাঠ্য / ফোল্ডারগুলির তালিকা আকার মানব-পঠনযোগ্য ফর্মের মধ্যে বর্তমান ডিরেক্টরিটিতে পুনরাবৃত্তভাবে

du -ah .

  • মানব পাঠযোগ্য আকার বাছাই করুন যা প্রথম কলামে উপস্থিত রয়েছে এবং বৃহত্তম 50 রাখুন

sort -k1 -h | tail -n 50


-1

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

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

ব্যবহারকারী du -hসংখ্যা অনুসারে বাছাই করা (মানব পাঠযোগ্য আউটপুট) আউটপুট পেতে চায় । আপনি এটির কোনও উত্তর সরবরাহ করছেন না। আপনি আপনার ইউএনআইএক্স-এসই অ্যাকাউন্টটি অন্য এসই সাইটগুলিতে থাকা অন্য অ্যাকাউন্টগুলির সাথেও লিঙ্ক করতে চাইতে পারেন।
টনিন

-2

এই স্ক্রিপ্টটি আরও সহজ:

for i in G M K; do du -h -d1 / | grep [0-9]$i | sort -n; done

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