ডিরেক্টরি আকারের গণনার পার্থক্য


9

সাইন ইন করার উদ্দেশ্যে আমার টার্মিনালে ডিরেক্টরি আকার পেতে হবে। আমি নিম্নলিখিত কমান্ড ব্যবহার করছি:

du -s /path/to/dir

আমি ফলাফলটি traditionalতিহ্যবাহী ইউনিক্স ব্লক আকার (512 বাইট) দ্বারা গুণ করছি এবং বাইটে প্রকৃত ডিরেক্টরি আকার পাচ্ছি। তবে, ফাইন্ডারের "তথ্য পান" ডায়ালগ উইন্ডোটি টার্মিনাল কমান্ডের সাহায্যে গণনা করা আকারের চেয়ে সামান্য ছোট দেখায়। এবং মনে হয় এটি কোনও ফোল্ডার / বান্ডেলে পুনরুত্পাদনযোগ্য। আমি কী মিস করছি?

উত্তর:


11

সাধারণত, ডিস্ক ব্যবহারdu সম্পর্কে তথ্য দেখায় (এটির নাম থেকেই আসে)। মনে রেখ যে

disk usage != sum of file sizes

কারণ প্রতিটি ফাইল ফাইল সিস্টেমে বেশ কয়েকটি ব্লক নেয় ( man mkfs.ext2উদাহরণস্বরূপ)। এর অর্থ হল যে খুব বিরল পরিস্থিতিতে কোনও ফাইলের একটি ডিস্ক ব্যবহার তার প্রকৃত আকারের সমান হয় - তার জন্য, আকারটি অবশ্যই ব্লকের আকারের একাধিক হতে হবে।

ফাইল সিস্টেম ব্লকগুলি এমন ফাইল হিসাবে ভাবেন যা ফাইলগুলির অংশ থাকে - প্রতিটি কেবল একটি ফাইলের একটি অংশ থাকতে পারে।

GNU সংস্করণের জন্য du, --apparent-sizeবিকল্পটি দেখুন।


একটি আরও আকর্ষণীয় পরিস্থিতি সংঘটিত হতে পারে, যখন ফাইল সিস্টেমে কিছু স্পার ফাইল রয়েছে !


এর মতো কোনও বিকল্প নেই (আমি লিনাক্স নয়, ওএস এক্সে আছি)। সম্ভবত কোনও প্রশ্নে তা উল্লেখ করা দরকার, যেহেতু ট্যাগ যথেষ্ট নয়))
আইমান্তাস

আহ, ডান ... তারপর র manpage কটাক্ষপাত আছে এবং উল্লেখ খুঁজতে চেষ্টা actualবা apparent। (এছাড়াও আমার আপডেট ব্যাখ্যা দেখুন)।
rozcietrzewiacz

2
বৈষম্য বাদ দিয়ে সঠিক করুন। ফাইলের আকারগুলি সংরক্ষণ করার জন্য কখনও কখনও প্রকৃত ডিস্ক জায়গার চেয়ে বড় হতে পারে। ( unix.stackexchange.com/q/33801/9426 )
স্টাফেন গিমেনেজ

@ স্টাফেনি গিমেনেজ বাহ ... আমাকে বলার জন্য ধন্যবাদ!
rozcietrzewiacz

2

ম্যাক ওএস এক্স এবং ফাইন্ডার সম্পর্কে (স্নো চিতাবাঘের সংস্করণ 10.6.8) আমি নিম্নলিখিতটি লক্ষ্য করেছি।

  • আমি bashনীচের কোডটি ( (1)) সহ কোনও পথের (ফাইল বা ফোল্ডার) ফাইন্ডারের 'পরিমাণযুক্ত' পরিসংখ্যানগুলির জন্য বাইট সংখ্যা পেয়েছি ।
  • ফাইন্ডার "তথ্য" উইন্ডোজ এবং ফলকটি বাইনারি (বেস 2, 1024) বাইটের বিপরীতে দশমিক (বেস 10, 1000) বাইটের 'কোয়ান্টিফায়েড' (উদাহরণস্বরূপ কেবিতে কিলো) দেখায় তাই আমি বিভাজন করে 'মাপদণ্ড' করব 1000 এবং ইউনিট (বাইট) উপসর্গ 'কোয়ান্টিফায়ার' (বিশালতা) বৃদ্ধি করে এবং কিছু অদ্ভুত "অফ ​​কী" রাউন্ডিং করে। (আমার সম্পূর্ণ কোডটি বহিরাগত মন্তব্যে উন্নত কোডে পূর্ণ এবং বেশ কয়েকটি ফাইলে (এবং ভাষাগুলিতে বিভক্ত তাই ভাগ করে নেওয়া শক্ত)))
    যতদূর আমি দেখেছি আমার 'পরিমিত' পরিসংখ্যানগুলি ফাইন্ডারের 'পরিমাণযুক্ত' চিত্রগুলির সমান ।
  • এছাড়াও, কোডের সাথে আমি এটি বলতে চাই যে BLOCKSIZEআমার শেলটিতে আমার কোনও পরিবেশের পরিবর্তনশীল সেট নেই (এবং কখনও ছিল না) তবে আমি উভয় সংস্করণ এবং এর জন্য ডিফল্ট মানগুলি $BLOCKSIZEএকই মানগুলি পরীক্ষা করেছি।

#!/usr/bin/env bash
#tab-width:4
                                 du -s                      "${@:-.}"   |awk '{u+=$1}END{   print  u*'${BLOCKSIZE:-0512}'   }'||exit $?         #macosx  (xnu)
#                               gdu -sB${BLOCKSIZE:-4096}   "${@:-.}"   |awk '{u+=$1}END{   print  u*'${BLOCKSIZE:-4096}'   }'||exit $?         #macports gnu

  • অমীমাংসিত নম্বরটি আমি মেলতে পারিনি।
    কেবলমাত্র আমি বলতে পারি যে আমি কেবল ফাইলগুলি গণনা করে কাছে যাই (এইভাবে ডিরেক্টরি file 'ফাইল-সিস্টেমের মেটা সূচক / শিরোনাম' ~ ডেটা বাদে) এবং আমার নিকটতমটি নীচের সাথে থাকে।

#!/usr/bin/env bash
#tab-width:4
    for a;do find "$a" -type f -print0|xargs -0      stat -f %z         |awk '{u+=$1}END{   print  u                        }'||exit $?;done    #macosx  (xnu)
#   for a;do find "$a" -type f -print0|xargs -0     gstat -c %s         |awk '{u+=$1}END{   print  u                        }'||exit $?;done    #macports gnu
  • (Xnu) du(1) বা (gnu) gdu(1) বর্ধিত বৈশিষ্ট্যগুলি গণনা করছে না ( xattr)

এবং তারপর আমি শুধু নয় শ্লেষ 'পাথ চালান ও গণিত do'
পিস আউট এবং শুভরাত্রি এই সময় fo'real।


1

আমার উবুন্টু সিস্টেমে, ext4 ব্যবহার করে, du -b fileএকটি আসল ফাইলের du -b dirবাইটে আকার দেয় এবং ফাইল (গুলি) + ডিরেক্টরি ওভারহেডের বাইটগুলিতে আকার দেয়, ওভারহেড আমার ক্ষেত্রে 4096 বাইটের গুণক ..

ফাইলের সংখ্যা বাড়ার সাথে সাথে এই ওভারহেডটি বৃদ্ধি পায়।
দ্রষ্টব্য: ফাইলগুলি মোছা হলেও, ডিরেক্টরি ওভারহেডটি ফ্ললগুলি মোছার আগে এটি যে উচ্চ স্তরে ছিল তা থেকে যায় ..

আমি রিবুট করার চেষ্টা করিনি, এটি আবার ফিরে আসে কিনা তা দেখার জন্য, তবে উভয় ক্ষেত্রেই এর অর্থ হ'ল ডিরেক্টরি আকারটি historicতিহাসিক পরিস্থিতি অনুসারে পরিবর্তিত হয়।

প্রতিটি ফাইলের আকারের তালিকাবদ্ধকরণ মোট ফাইলের আকারের একটি সঠিক মানের জন্য সেরা বিকল্প হতে পারে ।

নিম্নলিখিত স্ক্রিপ্ট মোট ফাইল আকার (বাইট মধ্যে) ..

OS X এর জন্য, আপনি যদি না থাকে -b'ডু' এর জন্য opton, আপনি ব্যবহার করতে পারেন statপরিবর্তে (যদি আপনি এটি আছে যদি:) ... মন্তব্য লাইন শো উবুন্টু। statবিকল্প du -b;

unset total
while IFS= read -r -d $'\0' rf; do
  # (( total += $(stat  "$rf" | sed -nre 's/^  Size: ([0-9]+).*/\1/p') ))
    (( total += $(du -b "$rf" | cut -f 1) ))
done < <(find  . -type f  -name '*' -print0)
echo $total

2
ওএসএক্সের নেইdu -b এবং আলাদাstat । আপনার স্ক্রিপ্টটি কোনওভাবেই লিনাক্সের বাইরে বহনযোগ্য নয়।
গিলস 'অশুভ হওয়া বন্ধ করুন'

ওএস এক্স-এ ম্যাকপোর্টস সহ আপনি coreutilsএর duহিসাবে জিএনইউ সংস্করণ পেতে ইনস্টল করতে পারেন gdu। সুতরাং এটি একেবারে পোর্টেবল নয়, তবে কয়েকটি মূল ব্যবহারের জিএনইউ সংস্করণ পেতে ওএস এক্সের লোকদের পক্ষে এটি কার্যকর হতে পারে।
drfrogsplat

1

একটি ডিরেক্টরিতে সমস্ত ফাইল যোগ করুন:

ওএসএক্স: find dir ! -type d -print0 | xargs -0 stat -f '%z' | awk '{sum += $1} END{print sum}'

লিনাক্স: find dir ! -type d -printf "%s\n" | awk '{sum += $1} END{print sum}'


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