কমান্ড-লাইন থেকে আমি কীভাবে লিনাক্স বা ম্যাক ওএস এক্স ডিরেক্টরিটির আকার পেতে পারি? [প্রতিলিপি]


74

এই প্রশ্নের ইতিমধ্যে এখানে একটি উত্তর আছে:

লিনাক্স বা ম্যাক ওএস এক্স ডিরেক্টরিতে সমস্ত ফাইলের আকার (পুনরাবৃত্তভাবে) খুঁজে পেতে আমি কোন আদেশটি ব্যবহার করব?


2
আপনি -k1 কে-বাইটের ব্লক আকার ব্যবহার করতে বিকল্পটি ব্যবহার করতে পারেন
জোকার

আমি কেবল ডিস্ক ইনভেন্টরি এক্স নামে এই নিখরচার সফ্টওয়্যারটি সুপারিশ করতে চাই der এখানে এটি derlien.com ডাউনলোড করুন ম্যাক
অসক্সের

পরিবর্তে du, আমি ব্যবহার করি ncdu, আপনি এখানে রেফারেন্সটি পেতে পারেন, remysharp.com/2018/08/23/cli- সংশোধিত
অ্যালান দং

উত্তর:


82

duওএস এক্সে ব্যবহৃত বিএসডি সংস্করণটি 512-বাইট ব্লক সহ আকারের রিপোর্ট করে - আকারগুলি মূলত পরবর্তী 512-বাইট মান পর্যন্ত গোল হয়। এটি আপনাকে ডিস্কে স্থান বলে দেয় যা ডেটার পরিমাণের চেয়ে বড়। আপনার যদি অনেক ছোট ফাইল থাকে তবে পার্থক্যটি বড় হতে পারে।

এখানে একটি উদাহরণ।

এটি নিয়মিত সহ মান du। এটি 512-বাইট ব্লকে রয়েছে:

$ du -s
248   .

-hএকটি আরো ভালো পঠনযোগ্য সংখ্যা পতাকা ফলাফল, কিলোবাইট হবে। প্রত্যাশিত হিসাবে এটি 512-বাইট ব্লকের অর্ধেক সংখ্যা:

$ du -hs
124K  .

অবশেষে, আপনি ফাইলগুলিতে প্রকৃত বাইটের যোগফল ব্যবহার করতে findএবং awkদিতে পারেন। এটি ধীর ধরণের, তবে এটি কার্যকর:

$ find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
60527

এই মানটি ফাইন্ডারের তথ্য তথ্য উইন্ডো দ্বারা উল্লিখিত সংখ্যার সাথে ঠিক মেলে। (ফাইলগুলির এই সেটে কোনও অদ্ভুত কাঁটাচামচ বা এক্সটটার নেই)) এটি উল্লিখিত মানের তুলনায় উল্লেখযোগ্যভাবে ছোট du

এটি কীভাবে কাজ করে তা এখানে: এটি সমস্ত ফাইলের একটি তালিকা পেয়েছে এবং এগুলিকে দেয় ls -l; তারপরে awkবাইটগুলি গণনা করতে ব্যবহৃত হয়। -type fযাতে শুধুমাত্র ফাইল (এবং ডিরেক্টরি) পাঠানো পেতে পতাকা আছে ls। এই পতাকা ছাড়াই এটি ডিরেক্টরি নাম প্রেরণ lsকরবে এবং প্রতিটি ফাইল দু'বার তালিকাভূক্ত হবে: একবার পৃথক ফাইল হিসাবে এবং একবার ডিরেক্টরিতে কোনও আইটেম হিসাবে।

এর জিএনইউ সংস্করণটি duব্লকের পরিবর্তে প্রকৃত বাইটে মান দিতে পারে। দুর্ভাগ্যজনক যে বিএসডি সংস্করণটি duনমনীয় নয়।


দুর্দান্ত ব্যাখ্যা। মজার বিষয় duহ'ল GNU কোর্টিলগুলি -bবিকল্পটি ব্যবহার করার সাথে সাথে আমি আপনার findপাইপের চেয়ে আলাদা ফলাফল পেয়েছি । 36 জিবি ডিরেক্টরিতে আমি একটি 82 কেবি পার্থক্য পাই।
স্টিফান শ্মিট

এটি আরও বেশি মানব পাঠযোগ্য বিন্যাসে ছাপানোর কোনও উপায় আছে কি?
anon58192932

75

একটি একক ফাইলের আকার দেখান

du -h path_to_a_file

ডিরেক্টরি, প্রতিটি উপ ডিরেক্টরি এবং প্রতিটি পৃথক ফাইলের সামগ্রীর আকার প্রদর্শন করুন:

du -h path_to_a_directory

একটি ডিরেক্টরি সামগ্রীর আকার প্রদর্শন করুন:

du -sh path_to_a_directory


25
du -schআপনি আরও সহজে পাঠযোগ্য কিছু চাইলে।
জোয়

@ জোহনেস, আমার ধারণা আপনি উত্তর হিসাবে এই মন্তব্য পোস্ট করা উচিত, যাতে এটি গ্রহণ করা যেতে পারে?
আরজান

আমি -c বিকল্পটি রিডানড্যান্ট খুঁজে পাই (কমপক্ষে ম্যাক ওএস এক্সে) এবং ডু-শ সাবটোটালগুলিকে সুপার্রেস করে।
ড্যারিল স্পিজিটর

আহা, আমি জানতাম না যে কেউ নিজের উত্তর গ্রহণ করতে পারে। এখন কমপক্ষে লোকেরা জানতে পারে যে প্রশ্নটি সমাধান হয়েছে।
আরজান

আমি আনন্দের সাথে একটি নতুন উত্তর গ্রহণ করব যা আমার ক্ষেত্রে উন্নতি।
ড্যারিল স্পিজিটর

9

du - ডিস্কটি ফাইলের আকার না ব্যবহার করতে বলে ।

find . -type f -print0 | xargs -0 stat -f%z | awk '{b+=$1} END {print b}'

টার্মিনাল কোডের উপরে (ওএসএক্স 10.6 এ থাকা) আমার জন্য সেরা ফলাফল দেয় এবং এটি "সন্ধান করুন ... -প্রয়োগ" এর চেয়ে দ্রুততর

একটি দ্রুত মানদণ্ড

time find . -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}'
4744010970

real    0m0.086s
user    0m0.029s
sys 0m0.073s

time find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
4744010970

real    0m18.515s
user    0m2.929s
sys 0m9.339s

আপনি যদি উবুন্টুতেও এটি করতে চান:find . -type f -print0 | xargs -0 stat -c%s | awk '{b+=$1} END {print b}'
রদ্রিগো পোলো

মানব-পঠনযোগ্য বিন্যাসে এই ফলাফলটি পাওয়ার কোনও উপায় আছে কি?
anon58192932

5

আপনি du -ah .যা ব্যবহার করতে পারেন যা সমস্ত ফাইল এবং ডিরেক্টরিগুলির আকারগুলি পুনরাবৃত্তভাবে প্রদর্শন করে।

এটির সাথে একত্রিত হতে পারে sort, সুতরাং আপনি বর্তমান ফোল্ডারে শীর্ষ -২০ টি বৃহত্তম ডিরেক্টরি দেখতে পাবেন:

du -ah . | sort -rh | head -20

দ্রষ্টব্য: অপশন -hজন্য sortওএসএক্স / বাসদ উপলব্ধ নেই, তাই আপনি ইনস্টল করতে করেছি sortথেকে coreutils(যেমন মাধ্যমে brew) এবং ইবনে পথ ক্ষেত্রে প্রযোজ্য PATH, যেমন

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.

অন্যথায় ব্যবহার করুন:

du -a . | sort -rn | head -20

প্রথম কমান্ডটি আমার ম্যাকোস 10.12.1 # ডি-এ-তে কাজ করবে না। | সাজানো -আরহ | শিরোনাম -20 সাজান: অবৈধ বিকল্প - h আরও তথ্যের জন্য। সাজানো - সহায়তা he চেষ্টা করুন।
নিউক্লিয়ারটাক্স

2
@ নিউক্লিয়ারটাক্স কমান্ডের নীচে নোটটি পরীক্ষা করুন। এটি জিএনইউ সাজানোর ক্ষেত্রে কাজ করে যা আপনি ম্যাকোএস-এর মাধ্যমে ইনস্টল করতে পারবেন: brew install coreutilsঅন্যথায় বিএসডি সাজ্ট কমান্ডটি ব্যবহার না করে শেষের দিকে ব্যবহার করুন -h
কেনারব

2

আমি আপনার সমস্ত অ্যাপগুলিকে একত্রিত করেছি এবং এটি একটি মানব পাঠযোগ্য আউটপুটটির সাথে সংযুক্ত করেছি ফলাফলটি:

#!/bin/sh
find $1 -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}' | awk '{ sum=$1 ; hum[1024**3]="Gb";hum[1024**2]="Mb";hum[1024]="Kb"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'

গিস্টটির লিঙ্ক: https://gist.github.com/mlegnhausen/9365461 61

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