প্রশ্ন আমি কিভাবে আকার দ্বারা du -h আউটপুট বাছাই করতে পারেন


আমি মানুষের পঠনযোগ্য du আউটপুট একটি তালিকা পেতে হবে।

যাহোক, du একটি "আকার অনুসারে সাজান" বিকল্প নেই, এবং পাইপিং আছে sort মানুষের পঠনযোগ্য পতাকা সঙ্গে কাজ করে না।

উদাহরণস্বরূপ, চলমান:

du | sort -n -r 

আউটপুট আকার অনুসারে একটি সাজানো ডিস্ক ব্যবহার (অবতরণ):

du |sort -n -r
65108   .
61508   ./dir3
2056    ./dir4
1032    ./dir1
508     ./dir2

যাইহোক, এটি মানুষের পঠনযোগ্য পতাকা দিয়ে চলমান, সঠিকভাবে সাজান না:

du -h | sort -n -r

508K    ./dir2
64M     .
61M     ./dir3
2.1M    ./dir4
1.1M    ./dir1

কেউ সাজানোর একটি উপায় জানেন du -h  আকার দ্বারা?


834
2018-02-25 13:42


উত্স


হেই ... মজার আপনি জিজ্ঞাসা করা উচিত, এই জন্য আমাকে বিরক্তিকর ... এক বছরেরও বেশি ভাল। গত সপ্তাহে আমি জিএনইউ কোর্টিলিলের কোডটি ডাউনলোড করেছি (যা কোন ধরণের অংশ), এবং একটি চেহারা ছিল, তবে সিদ্ধান্ত নিয়েছে যে আমার হাত প্যাচ করার চেয়ে একটু বেশি সময় লাগবে ... যে কেউ? :) - unwind
এখানে একটি অনেক সম্পর্কিত প্রশ্ন: serverfault.com/q/737537/35034 - cregox
আপনি এই এক দেখা আছে? unix.stackexchange.com/questions/4681/...  এটি একটি কাছাকাছি নকল এবং স্বর্ণের মূল্য। আপনি একটি স্বাভাবিক কাজ du কিন্তু এইচ যোগ করুন sort কমান্ড। আপনি যোগ করতে পারেন -rh তাই বৃহত্তম ফাইল প্রথম হয়, অন্যথায় আপনি প্রয়োজন tail স্থান hogs দেখতে। - SDsolar
আমি এই প্রশ্নটি এত জনপ্রিয় হওয়ার আশা করি নি যখন আমি এই গুগলকে ডেকেছিলাম। - Mateen Ulhaq


উত্তর:


হিসাবে জিএনইউ কোর্টিল 7.5 ২009 সালের আগস্ট মাসে মুক্তি পায়, sort একটি অনুমতি দেয় -h পরামিতি, যা উত্পাদিত ধরনের সংখ্যাসূচক প্রতিক্রিয়া অনুমতি দেয় du -h:

du -hs * | sort -h

আপনি যদি এমন কোন ধরণের ব্যবহার করেন যা সমর্থন করে না -h, আপনি GNU Coreutils ইনস্টল করতে পারেন। উদাহরণস্বরূপ একটি পুরোনো ম্যাক ওএস এক্স এ:

brew install coreutils
du -hs * | gsort -h

থেকে sort ম্যানুয়াল:

-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)


1158
2017-07-01 12:29



ম্যানুয়াল প্রাসঙ্গিক বিভাগ: gnu.org/software/coreutils/manual/... - wodow
হোমব্রু সঙ্গে ওএস এক্স ইনস্টল করার জন্য সহজ - ইনস্টল coreutils। - Richard Poirier
ভাল একটা! আমি ব্যক্তিগতভাবে সবসময় করেনি du -BM | sort -nr একটি কার্যকারিতা হিসাবে - এটি মানুষের যথেষ্ট পঠনযোগ্য, এবং এটি সাজানো হয়, যদি কেউ পুরোনো কোরআউট সঙ্গে আটকে আছে। - chutz
Homebrew এর মাধ্যমে OSX ব্যবহার করলে, আপনাকে অবশ্যই সাজানোর পরিবর্তে gsort ব্যবহার করতে হবে: du -hs * | gsort -h - Brian Cline
@PaulDraper, du -BM মেগাবাইটে সবকিছু মুদ্রণ করে, তাই 168 কে একটি ফাইল আসলে 0M হিসাবে প্রদর্শিত হবে। অন্য কোন সংস্করণ বিচ্ছিন্নতা না থাকলে আমি সচেতন নই। আমার সংস্করণ du শুধুমাত্র পূর্ণসংখ্যা মেগাবাইট মান দেখায়। - chutz


du | sort -nr | cut -f2- | xargs du -hs

82
2018-02-25 13:52



এবং এটি অনুলিপি গণনা একটি বিশাল পরিমাণ করতে হবে। - Douglas Leeder
প্রথমে এটি স্বাভাবিক দুটিকে করে - তারপর প্রতিটি এন্ট্রির জন্য এটি আকারের পুনঃসংখ্যাটি কেবল মানব পাঠযোগ্য আকারে মুদ্রণ করতে পারে। - Douglas Leeder
@ ডগলাস লিডার: আপনি ডুপ্লিকেট কাউন্টিংয়ের জন্য সঠিক, কিন্তু মনে করেন যে দ্বিতীয় ডিউটি ​​ঠান্ডা ক্যাশে (ওএস এর জন্য ধন্যবাদ) থেকে শুরু হয় না। হেসেন জে: xargs একটি খুব দরকারী কমান্ড, এটি স্টেডিনকে বিভক্ত করে এবং এটি যুক্তি হিসাবে ফিড করে দেওয়া কমান্ড - cadrian
হোয়াইট স্পেস ধারণকারী পাথ সঙ্গে কাজ করে ক্রিস এর আসলে উচ্চতর। আপনার পথ ভোট, বন্ধু। - rbright
কুৎসিত, কিন্তু ক্রস প্ল্যাটফর্ম :)। - voretaq7


@ ডগলাস লিডার, আরও একটি উত্তর: অন্য হাতিয়ার ব্যবহার করে du -h থেকে মানুষের পাঠযোগ্য আউটপুট সাজান। পার্লের মত!

du -h | perl -e 'sub h{%h=(K=>10,M=>20,G=>30);($n,$u)=shift=~/([0-9.]+)(\D)/;
return $n*2**$h{$u}}print sort{h($b)<=>h($a)}<>;'

প্রদর্শন মাপসই দুটি লাইন সম্মুখের বিভক্ত। আপনি এভাবে এটি ব্যবহার করতে পারেন অথবা এটি একটি এক-মাছ ধরার যন্ত্র তৈরি করতে পারেন, এটি কোনো উপায়ে কাজ করবে।

আউটপুট:

4.5M    .
3.7M    ./colors
372K    ./plugin
128K    ./autoload
100K    ./doc
100K    ./syntax

সম্পাদনা করুন: গল্ফ কিছু রাউন্ড পরে PerlMonks, চূড়ান্ত ফলাফল নিম্নলিখিত:

perl -e'%h=map{/.\s/;99**(ord$&&7)-$`,$_}`du -h`;die@h{sort%h}'

59
2018-02-25 21:04



আপনার সংক্ষিপ্ত সংস্করণ আউটপুট stderr কারণ die আপনি এটি আউটপুট করতে এটি পরিবর্তন করতে পারেন stdout? - Dennis Williamson
পরিবর্তন die একটি print এবং এটা যেতে হবে stdout। এটা শুধু আরো দুটি অক্ষর। - Adam Bellaire
উবুন্টুতে কাজ! - marinara
চিত্তাকর্ষক পার্ল হ্যাকিস্ট্রি - nandoP
ফলাফল বিপরীত ক্রম :(( - RSFalcon7


আমি বলা একটি অত্যন্ত দরকারী হাতিয়ার ব্যবহার করা হয় ncdu যে pesky উচ্চ ডিস্ক-ব্যবহার ফোল্ডার এবং ফাইল খুঁজে, এবং তাদের অপসারণ করার জন্য ডিজাইন করা হয়। এটা কনসোল ভিত্তিক, দ্রুত এবং হালকা, এবং সমস্ত প্রধান বিতরণ প্যাকেজ আছে।


50
2018-02-25 20:39



খুব চমৎকার ... ফলাফলগুলি মানসম্মত হয়ে গেলে ফলাফলগুলি খাওয়া যেতে পারে আমি ভাবছি ... আমি খুব অলস যে আমি ম্যানুয়ালটি পড়তে পারছি না - ojblass
gt5 একই শিরা হয়; তার হত্যাকারী বৈশিষ্ট্য বৃদ্ধি প্রদর্শন করা হয়। - Tobu
ওটা সত্যিই ভালো! এবং প্রায় সঙ্গে ঝুলন্ত চেয়ে অনেক দ্রুত du, যদি আপনি শুধু বড় ডিরেক্টরি সনাক্ত করতে চান। - BurninLeo


du -k * | sort -nr | cut -f2 | xargs -d '\n' du -sh

43
2018-02-25 14:01



শুধু আমি ধন্যবাদ খুঁজছেন কি - Edward Tanguay
সঙ্গে ব্যবহার করতে পারবেন না du -k --total, শেষে ত্রুটি দেয় du: cannot access 'total': No such file or directory - laggingreflex
আমি এই অন্য কোন উত্তর পছন্দ। কিভাবে আপনি শুধুমাত্র প্রথম 50 ফলাফল প্রদর্শন করতে হবে? - Mauro
@ মুরো - শুধু পাইপ ফলাফল head যোগ করে | মাথা -50` শেষে। - Samuel Lelièvre


যতদূর আমি দেখতে পাচ্ছি আপনার তিনটি বিকল্প রয়েছে:

  1. পরিবর্তন করা du প্রদর্শনের আগে সাজানোর জন্য।
  2. পরিবর্তন করা sort সংখ্যাসূচক সাজানোর জন্য মানুষের মাপ সমর্থন।
  3. পোস্ট পাঠান সাজানোর থেকে আউটপুট মৌলিক আউটপুট মানুষের পঠনযোগ্য পরিবর্তন।

আপনিও করতে পারেন du -k এবং KiB মাপ সঙ্গে বাস।

বিকল্প 3 এর জন্য আপনি নিম্নলিখিত স্ক্রিপ্ট ব্যবহার করতে পারেন:

#!/usr/bin/env python

import sys
import re

sizeRe = re.compile(r"^(\d+)(.*)$")

for line in sys.stdin.readlines():
    mo = sizeRe.match(line)
    if mo:
        size = int(mo.group(1))
        if size < 1024:
            size = str(size)+"K"
        elif size < 1024 ** 2:
            size = str(size/1024)+"M"
        else:
            size = str(size/(1024 ** 2))+"G"

        print "%s%s"%(size,mo.group(2))
    else:
        print line

20
2018-02-25 13:53





আমিও সেই সমস্যাটি করেছি এবং বর্তমানে আমি একটি কার্যকারিতা ব্যবহার করছি:

du -scBM | sort -n

এটি স্কেল মানগুলি উত্পাদন করবে না, তবে সর্বদা মেগাবাইটগুলিতে আকার তৈরি করবে। এটি নিখুঁত তবে কম, কিন্তু আমার জন্য এটি কিছুই (অথবা বাইটের আকার প্রদর্শন করা) এর চেয়ে ভাল।


19
2018-02-25 13:56



আমি th-bm স্যুইচটি পছন্দ করি যা মূলত এম-এর মতো একই রকম, তবে এটি আকারের আকার এবং এমটিকে পোস্টফিক্সড করার সুবিধা রয়েছে, তাই আপনি 10 এম পাবেন যা 10 এর চেয়েও বেশি স্পষ্ট! - Tom Feiner
এই পৃষ্ঠায় এত সহজ সমাধান আমি দেখেছি, আপনাকে ধন্যবাদ! - Jeff Olson


পাওয়া এই পোস্টিং অন্যত্র। অতএব, এই শেল স্ক্রিপ্ট আপনি কল ছাড়া কি করতে চান du সবকিছু দুবার। এটি ব্যবহার করে awk কাঁচা বাইট একটি মানুষের পঠনযোগ্য বিন্যাসে রূপান্তর। অবশ্যই, বিন্যাসটি সামান্য ভিন্ন (সবকিছু দশমিক স্থান স্পষ্টতাতে মুদ্রিত হয়)।

#/bin/bash
du -B1 | sort -nr  |awk '{sum=$1;
hum[1024**3]="G";hum[1024**2]="M";hum[1024]="K";
for (x=1024**3; x>=1024; x/=1024){
        if (sum>=x) { printf "%.1f%s\t\t",sum/x,hum[x];print $2;break
}}}'

আমার এই চলমান .vim ডিরেক্টরি ফলন:

4.4M            .
3.6M            ./colors
372.0K          ./plugin
128.0K          ./autoload
100.0K          ./syntax
100.0K          ./doc

(আমি আশা করি 3.6 মিটারের রঙের স্কিম অতিরিক্ত নয়।)


18
2018-02-25 14:09



আমারও একটি পার্ল উত্তর আছে, কিন্তু আমার মনে হয় এটি আমাকে ঘৃণা করতে পারে: du -B1 | সাজান -আরআর | perl -e '% h = (0 => b, 1 => K, 2 => M, 3 => G); (<>) {($ s, @ f) = বিভক্ত / \ s + /; $ e = 3; $ e-- while (1024 ** $ e> $ s); $ v = ($ s / (1024 ** $ e)) printf "% -8s% s \ n", sprintf ($ v> = 100? "% d% s": "% .1f% s", $ s / (1024 ** $ e), $ h {$ e}), @ f;} ' - Adam Bellaire
পার্ল উত্তর আসলে তার অনেক কাছাকাছি দুটো ফর্ম্যাটিং দেয়। বৃত্তাকার বন্ধ যদিও ... মনে হচ্ছে du সবসময় রাউন্ডের চেয়ে সিল () দেয় () - Adam Bellaire
আরে, কেন আমি একটি হ্যাশ ব্যবহার করেছিলাম? একটি অ্যারে করা উচিত ... সকালে-মস্তিষ্ক নালিশ.... - Adam Bellaire
অন্য উত্তর হিসাবে একটি ভাল পার্ল সমাধান যোগ করা হয়েছে। - Adam Bellaire
ফাইলের নাম স্পেস রয়েছে যখন উভয় সংস্করণ ব্যর্থ - Vi.


এই সংস্করণ ব্যবহার করে awk সাজানোর কী জন্য অতিরিক্ত কলাম তৈরি করতে। এটা শুধুমাত্র কল du একদা. আউটপুট ঠিক মত চেহারা উচিত du

আমি এটি একাধিক লাইন মধ্যে বিভক্ত করেছি, কিন্তু এটি একটি এক-মাছ ধরার নৌকা মধ্যে recombined করা যাবে।

du -h |
  awk '{printf "%s %08.2f\t%s\n", 
    index("KMG", substr($1, length($1))),
    substr($1, 0, length($1)-1), $0}' |
  sort -r | cut -f2,3

ব্যাখ্যা:

  • BEGIN - কে, এম, জি এর জন্য 1, 2, 3 এর জন্য 1, 2, 3 প্রতিস্থাপনের জন্য সূচীতে স্ট্রিং তৈরি করুন, যদি ইউনিটগুলির দ্বারা গোষ্ঠীভুক্ত না হয় তবে কোনও ইউনিট নেই (আকার 1K এর চেয়ে কম), তাহলে কোন মিল নেই এবং একটি শূন্য ফেরত পাওয়া যায় (নিখুঁত! )
  • নতুন ক্ষেত্র মুদ্রণ করুন - ইউনিট, মান (আলফা-সাজানোর সঠিকভাবে কাজ করার জন্য এটি শূন্য-প্যাডেড, নির্দিষ্ট-দৈর্ঘ্য) এবং মূল লাইন
  • সূচক ক্ষেত্রের শেষ চরিত্র সূচক
  • আকার সংখ্যাসূচক অংশ টান
  • ফলাফল সাজান, অতিরিক্ত কলাম বাতিল

এটা ছাড়া চেষ্টা করুন cut এটা কি করছে তা দেখতে কমান্ড।

এখানে একটি সংস্করণ যা AWK স্ক্রিপ্টের মধ্যে বাছাই করে এবং এটি প্রয়োজন হয় না cut:

du -h |
   awk '{idx = sprintf("%s %08.2f %s", 
         index("KMG", substr($1, length($1))),
         substr($1, 0, length($1)-1), $0);
         lines[idx] = $0}
    END {c = asorti(lines, sorted);
         for (i = c; i >= 1; i--)
           print lines[sorted[i]]}'

14
2017-09-04 17:06



ধন্যবাদ! এটি এমন প্রথম উদাহরণ যা আমার জন্য OS X 10.6-এ পার্ল / ফাইটন-স্ক্রিপ্টগুলি গণনা করে না। এবং ভাল ব্যাখ্যা জন্য আবার ধন্যবাদ। নতুন কিছু শিখতে সবসময় সুন্দর। আতঙ্ক নিশ্চিত একটি শক্তিশালী হাতিয়ার। - Wolf
যে জন্য গ্রেট ধন্যবাদ। আমি du পরিবর্তন du -sh * recursive বংশহীন ছাড়া শুধু অবিলম্বে ফাইল এবং ডিরেক্টরি প্রদর্শন করতে। - HankCa