উত্তর:
FreeBSD 'র / Mac OS X এর সাথে find
, stat
এবং awk
(না ঠিক একটি সহজ এক-লাইনের যদিও):
find -x . -type f -maxdepth 1 -exec sh -c 'stat -f '%z' "${@}"' _ '{}' + |
LC_ALL=C awk -v pwd="${PWD}" '
BEGIN{ sum=0; count=0; }
{ sum+=$1; ++count; }
END{
if (count == 0) exit;
printf ("number of files: %d\n", count);
printf ("average file size in B: %.5f\n", sum/count);
printf ("average file size in KB: %.5f\n", (sum/count) / 1024);
printf ("average file size in MB: %.5f\n", (sum/count) / (1024*1024));
printf ("directory: %s\n", pwd);
}
'
-v var=value
, awk
ANSI সি সিকোয়েন্স প্রসারিত হবে যেমন \n
, \r
... যদিও শাঁস রপ্তানি না PWD
, তাই আপনি ব্যবহার করতে পারেন ENVIRON["PWD"]
মধ্যে awk
যা তাদের নামে ব্যাকস্ল্যাশ থাকার ডিরেক্টরি জন্য সমস্যা যে ধরনের নেই।
find . -type f -exec stat -f%z {} +|awk '{s+=$0}END{print s/NR}'
।
জিএনইউ সহ:
find . -type f -printf '%s\n' | awk '{s+=$0}
END {printf "Count: %u\nAverage size: %.2f\n", NR, s/NR}'
অথবা ডিস্ক ব্যবহারের জন্য:
find . -type f -printf '%k\n' | awk '{s+=$0}
END {printf "Count: %u\nAverage size: %.2f\n", NR, s*1024/NR}'
মনে রাখবেন যে সেখানে যদি একই ফাইলের বেশ কয়েকটি হার্ডলিঙ্ক থাকে, তবে এটির ডিস্কের ব্যবহার বেশ কয়েকবার গণনা করবে।
উপরেরগুলি কেবল নিয়মিত ফাইলগুলি গণনা করে, সিমলিঙ্ক বা ডিরেক্টরি বা অন্যান্য বিশেষ ফাইল নয়। এটি লুকানো ফাইল অন্তর্ভুক্ত।
zsh
বিল্টিনগুলির সাথে একই :
zmodload -i zsh/stat
count() {zstat -Hs -- $REPLY; ((size+=$s[size], count++, 0))}
size=0 count=0
**/*(oNDN.+count)
print -f "Count: %s\nAverage size: %.2f\n" $count $(($size./count))
এক লাইনে সরল সমাধান:
ls -Rl -- "$DIR" | awk 'BEGIN{sum=0;count=0};/^-/{sum+=$5;++count};END{print sum/count}'
এটিতে সিনট্যাকটিক চিট রয়েছে, কেবলমাত্র ls
'-' দিয়ে শুরু হওয়া আউটপুট লাইনগুলি বিবেচনা করে , যা নিয়মিত ফাইলগুলির জন্য ডেটা গঠন করে।
সাব ডিরেক্টরিগুলি উপেক্ষা করে কেবল একটি ডিরেক্টরিতে ফাইলের জন্য:
expr $(du -Ss | cut -f1) / $(find /path/to/dir -maxdepth 1 -type f | wc -l)
বা সাব-ডিরেক্টরিতে ফাইল সহ সমস্ত ফাইল গণনা করতে:
expr $(du -s | cut -f1) / $(find /path/to/dir -type f | wc -l)
du -s
আপ যোগ হবে ডিস্কের ব্যবহার সব ফাইল এর (না সাইজ) ও ডিরেক্টরিগুলি এবং অন্যান্য অ নিয়মিত ফাইল , একই ফাইলে অতিরিক্ত হার্ড সংযোগগুলি ব্যতীত যখন find
সব নিয়মিত ফাইল গণনা করা হবে। এছাড়াও, নতুন লাইনের অক্ষরযুক্ত ফাইলের নামগুলি কয়েকবার গণনা করা হবে। du -S
জিএনইউ নির্দিষ্ট। du -s
ওএসের উপর নির্ভর করে সেক্টর বা কিলোবাইট প্রতিবেদন করবে।