বাশ মধ্যে ফোল্ডার আকার পরীক্ষা করুন


316

আমি এমন একটি স্ক্রিপ্ট লেখার চেষ্টা করছি যা কোনও ডিরেক্টরি আকারের গণনা করবে এবং যদি আকারটি 10 ​​গিগাবাইটের চেয়ে কম হয় এবং এর চেয়ে বেশি 2 জিবি কিছু ক্রিয়া করে। আমার ফোল্ডারের নাম উল্লেখ করার দরকার কোথায়?

# 10GB
SIZE="1074747474"

# check the current size
CHECK="`du /data/sflow_log/`"
if [ "$CHECK" -gt "$SIZE" ]; then
  echo "DONE"
fi

1
এবং যদি আপনি এটি বাছাই করতে চান: সার্ভারফল্ট.কোয়েশনস
ক্রেগোক্স

সংক্রান্ত প্রশ্ন: stackoverflow.com/q/1241801/5447906 , unix.stackexchange.com/q/185764/152606
anton_rh

যেহেতু এটি একটি জনপ্রিয় প্রশ্ন - কোনও শিক্ষানবিশ যদি এই প্রশ্নের উত্তরগুলির মুখোমুখি duহয় এবং হেকটি কী এবং এই আদেশগুলি প্রত্যেকে কীভাবে জানে সে সম্পর্কে আরও জানতে চান : man duম্যানুয়ালটিতে du কমান্ডটি অনুসন্ধান করতে আপনি আপনার টার্মিনালে টাইপ করতে পারেন । এটি এমন একটি আউটপুট প্রদর্শন করবে যা আপনি দেখতে পাচ্ছেন এবং সমস্ত ফ্ল্যাশগুলির সংক্ষিপ্তসার করবে যেমন -h, -c, -s, -b, -B, --আর-আকার ইত্যাদি ইত্যাদি উত্তরগুলি আপনি ব্যবহার করার পরামর্শ দিচ্ছেন। তারপরে, আপনি নিজের duনির্দিষ্ট সিদ্ধান্তের ক্ষেত্রে কীভাবে সেরা ব্যবহার করতে চান তা আপনি নিজেরাই স্থির করতে পারেন ।
জোশ ডেসমন্ড

উত্তর:


608

আপনি করতে পারেন:

du -h your_directory

যা আপনাকে আপনার টার্গেট ডিরেক্টরিতে আকার দেবে।

আপনি যদি একটি সংক্ষিপ্ত আউটপুট চান, দুর্দান্ত du -hcs your_directory


15
আপনি যখন কোনও স্ক্রিপ্টের জন্য একটি মান পাওয়ার চেষ্টা করছেন তখন আপনি মানব-পঠনযোগ্য নম্বর চান না।
ধান 4

4
কোনও ডিরেক্টরি পাথ নির্দিষ্ট না করে এটি বর্তমান কার্যক্ষম ডিরেক্টরিতে ডিফল্ট হবে। সুতরাং du -hs== du -hs .
razz

8
এছাড়াও চেক আউট: du | sort -nএটা তার আকার দ্বারা ডিরেক্টরি সাজাতে হবে
optimiertes

3
du -hcs dir_name/*সাবফোল্ডারগুলি অন্তর্ভুক্ত করেছে
অপটিমিয়েরেটস

du -h <dir> | লেজ -1?
আলেকজান্ডার মিলস

143

আপনি যদি কেবল ফোল্ডারটির আকার দেখতে চান এবং সাব-ফোল্ডারগুলি না দেখতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

du -hs /path/to/directory

হালনাগাদ:

আপনার এটা জানা উচিত du ব্যবহৃত ডিস্কের স্থানটি দেখায়; এবং ফাইল আকার না।

আপনি --apparent-sizeযদি প্রকৃত ফাইল আকারের যোগফল দেখতে চান তবে আপনি ব্যবহার করতে পারেন ।

--apparent-size
      print  apparent  sizes,  rather  than  disk  usage; although the apparent size is usually smaller, it may be larger due to holes in ('sparse')
      files, internal fragmentation, indirect blocks, and the like

এবং অবশ্যই কোনও -hস্ক্রিপ্টের ভিতরে (মানব পাঠযোগ্য) বিকল্পের প্রয়োজন নেই ।

পরিবর্তে আপনি -bস্ক্রিপ্টের ভিতরে সহজে তুলনার জন্য ব্যবহার করতে পারেন ।

তবে আপনার নিজের দ্বারা এটি -bপ্রয়োগ --apparent-sizeকরা উচিত Note এবং এটি আপনার যা প্রয়োজন তা হতে পারে না।

-b, --bytes
      equivalent to '--apparent-size --block-size=1'

সুতরাং আমি মনে করি, আপনার ব্যবহার করা উচিত --block-sizeবা-B

#!/bin/bash
SIZE=$(du -B 1 /path/to/directory | cut -f 1 -d "   ")    
# 2GB = 2147483648 bytes
# 10GB = 10737418240 bytes
if [[ $SIZE -gt 2147483648 && $SIZE -lt 10737418240 ]]; then
    echo 'Condition returned True'
fi

আমি জানি এটি কয়েক বছর কেটে গেছে, তবে আপনি কী একটু শর্ত দিয়ে ব্যাখ্যা করতে পারেন যে শর্তসাপেক্ষে রেইজেক্স এবং BASH_REMATCH এর উদ্দেশ্য কী? (বা সেই সমস্ত ভেরিয়েবল / কমান্ড / ফর্ম্যাটগুলির ব্যবহার হিসাবে কিছু লিঙ্ক সরবরাহ করার জন্য) আমি কোডটি কেবলমাত্র একটি ভেরিয়েবলের ফাইলের আকার পেতে এবং 10 জিবি এর সাথে সরাসরি তুলনা করার জন্য প্রত্যাশা করতাম, এই অন্যান্য জিনিসগুলি কী করছে?
নর্ডিকো

2
পুনঃটুইট রেইজেক্স এবং BASH_REMATCH এর দরকার নেই তাই আমি উত্তরটি আপডেট করেছি।
ট্যাক্সেলুল

-bশুধুমাত্র du
জিএনইউর

29

একটি সংক্ষিপ্তসার ( -s) এবং বাইট ( -b) ব্যবহার করুন। আপনি সারাংশের প্রথম ক্ষেত্রটি দিয়ে কাটতে পারেন cut। সবগুলোকে একত্রে রাখ:

CHECK=$(du -sb /data/sflow_log | cut -f1)

1
আমি স্ক্রিপ্টিং শেল নতুন। Du কমান্ডের আউটপুট ডিরেক্টরি ডিরেক্টরি অন্তর্ভুক্ত। আমি কেবলমাত্র নম্বর অংশ পেতে পারিনি। আপনার উত্তরে "কাটা" রহস্যের সমাধান!
সরলডেভ

26

কেবলমাত্র ডিরেক্টরিটির আকার পেতে, আর কিছুই নয়:

du --max-depth=0 ./directory

আউটপুট মত দেখাচ্ছে

5234232       ./directory

5
--max-depthকার্যকরভাবে আউটপুট নিয়ন্ত্রণের জন্য খুব দরকারী! উদাহরণস্বরূপ, ডিরেক্টরিতে কী চলছে তার একটি ভাল ধারণা পাওয়ার জন্য:du -h --max-depth=1
ম্যাটানস্টার


12

আপনি যদি কেবল ফোল্ডারের সমষ্টি আকার এবং সম্ভবত এমবি বা জিবি ফর্ম্যাটে দেখতে চান তবে নীচের স্ক্রিপ্টটি চেষ্টা করে দেখুন

$du -s --block-size=M /path/to/your/directory/

1
ওএস এক্স-তে, পতাকাগুলি -g1-Gbyte এবং -m1-এমবিতে গণনাগুলির জন্য। এর মাধ্যমেman du
স্নাগল

5
# 10GB
SIZE="10"


# check the current size
CHECK="`du -hs /media/662499e1-b699-19ad-57b3-acb127aa5a2b/Aufnahmen`"
CHECK=${CHECK%G*}
echo "Current Foldersize: $CHECK GB"

if (( $(echo "$CHECK > $SIZE" |bc -l) )); then
        echo "Folder is bigger than $SIZE GB"
else
        echo "Folder is smaller than $SIZE GB"
fi

4

যদি সাহায্য করে, তুমিও উপনাম তৈরি করতে পারেন আপনার .bashrcবা.bash_profile

function dsize()
{
    dir=$(pwd)
    if [ "$1" != "" ]; then
            dir=$1
    fi
    echo $(du -hs $dir)
}

এটি বর্তমান নির্দেশিকা বা ডিরেক্টরিটিকে আপনি আর্গুমেন্ট হিসাবে পাস করেছেন এমন আকারের মুদ্রণ করে।


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