محاسبه حجم فایل ها با Shell Script

Gnu-bash-logo

شاید برای شما هم پیش آمده باشد که بخواهید حجم فایل های یک مسیر را بدست بیاورید.یا ازآن مهم تر بخواهید حجم فایل هایی که مثلا بیش از 8 روز تغییر نکرده اند را بدست آورید.برای انجام این چنین کارهایی روش ها و ابزارهای مختلفی وجود دارد.

در این مطلب قصد داریم با ارائه ی یک شل اسکریپت حجم فایل هایی که بیش از 8 روز تغییر نکرده اند را محاسبه کنیم.نکته اینکه برای اجرای این اسکریپت، ابزار bc که یک ماشین حساب خط فرمانی می باشد مورد نیاز می باشد.این shell script به شرح زیر می باشد :

 


#!/bin/bash
#@hos7ein

#find files :
find ${PWD}/ -type f -mtime +8 > list-files.txt

file="${PWD}/list-files.txt"
sum=0

for line in `cat $file`
do

tmp_size=$(wc -c "$line" | awk '{print $1}')
sum=$(echo $tmp_size+$sum | bc)

done

#convert byte to MB

echo $sum | awk '{ byte =$1 /1024/1024; print byte " MB" }'

echo "or"

#echo "Size on GB is :"
echo $sum | awk '{ byte =$1 /1024/1024/1024; print byte " GB" }'

 

عجله نکنید!اجازه دهید با هم این شل اسکریپت را مرور کنیم.

در خط 5 لیست فایل هایی که بیش از 8 روز است که تغییر نکرده اند را درون فایل list-files.txt ذخیره میکند.سپس با استفاده از یک حلقه ی for اندازه آن فایل ها تک به تک محاسبه و سپس حجم کلی را محاسبه می کند.در پایان هم حجم بدست آمده را از byte به MB و GB تبدیل می کند.

برای اجرای این اسکریپت ابتدا به مسیر مورد نظر خود که قصد محاسبه ی حجم فایل ها را دارید بروید و یک فایل مثلا با نام my-script.sh ایجاد کنید و خطوط بالا را در آن کپی و ذخیره کنید.اکنون  به آن مجوز اجرایی دهید و آن را  اجرا کنید :

 

$chmod +x my-script.sh

$./my-script.sh

 

امید است تا از این مطلب استفاده ی لازم را برده باشید و همیشه اندازه ی فایل های خود را حساب کتاب کنید!

 

 

4 نظرات
  1. مصطفی می گوید

    سلام . نمیدونم سوالم به این بخش ربطی داره یا نه
    من داشتم فدورا ۲۹ رو به ۳۰ آپدیت میکردم . تو مرحله آخر با ارور زیر مواجه شدم .
    Disk Requirements:
    At least 1306MB more space needed on the / filesystem.

    خروجی دستور df -m هم اینه :
    devtmpfs 1898 0 1898 0% /dev
    tmpfs 1919 216 1704 12% /dev/shm
    tmpfs 1919 2 1918 1% /run
    tmpfs 1919 0 1919 0% /sys/fs/cgroup
    /dev/mapper/fedora-root 10016 8812 676 93% /
    tmpfs 1919 5 1915 1% /tmp
    /dev/sda1 1952 205 1629 12% /boot
    /dev/mapper/fedora-home 20031 1849 17143 10% /home
    /dev/mapper/fedora-var 10016 8485 1004 90% /var
    /dev/loop1 203 203 0 100% /var/lib/snapd/snap/vlc/1049
    /dev/loop2 309 309 0 100% /var/lib/snapd/snap/phpstorm/109
    /dev/loop0 95 95 0 100% /var/lib/snapd/snap/telegram-desktop/836
    /dev/loop3 89 89 0 100% /var/lib/snapd/snap/core/7396
    /dev/loop4 43 43 0 100% /var/lib/snapd/snap/gtk-common-themes/1313
    /dev/loop5 55 55 0 100% /var/lib/snapd/snap/core18/1074
    tmpfs 384 8 377 2% /run/user/1000
    /dev/loop6 95 95 0 100% /var/lib/snapd/snap/telegram-desktop/877
    /dev/sda3 178953 61 169735 1% /run/media/Jdaall/test

    من چیکار باید کنم؟ مرسی

    1. hos7ein می گوید

      درود بر شما

      اینطور که معلومه فضای دیسک برای پارتیشن / کم هست.

      پیروز باشید.

      1. مصطفی می گوید

        ممنون . با صورت گرم چطوری میشه فضای پارتیشن ها رو افزایش داد؟

        1. hos7ein می گوید

          خواهش میکنم.
          بستگی داره پارتیشن از چه نوعی باشه. ولی در کل ابزارهای خود LVM یا growpart باید استفاده کنی.

پاسخ به hos7ein
لغو پاسخ

آدرس ایمیل شما منتشر نخواهد شد.

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.