Check folder size in Bash

前端 未结 8 803
情深已故
情深已故 2020-12-12 08:50

I\'m trying to write a script that will calculate a directory size and if the size is less than 10GB, and greater then 2GB do some action. Where do I need to mention my fol

相关标签:
8条回答
  • 2020-12-12 09:34

    You can do:

    du -h your_directory
    

    which will give you the size of your target directory.

    If you want a brief output, du -hcs your_directory is nice.

    0 讨论(0)
  • 2020-12-12 09:34

    if you just want to see the folder size and not the sub-folders, you can use:

    du -hs /path/to/directory
    

    Update:

    You should know that du shows the used disk space; and not the file size.

    You can use --apparent-size if u want to see sum of actual file sizes.

    --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
    

    And of course theres no need for -h (Human readable) option inside a script.

    Instead You can use -b for easier comparison inside script.

    But You should Note that -b applies --apparent-size by itself. And it might not be what you need.

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

    so I think, you should use --block-size or -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
    
    0 讨论(0)
  • 2020-12-12 09:34
    # 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
    
    0 讨论(0)
  • 2020-12-12 09:39

    Use a summary (-s) and bytes (-b). You can cut the first field of the summary with cut. Putting it all together:

    CHECK=$(du -sb /data/sflow_log | cut -f1)
    
    0 讨论(0)
  • 2020-12-12 09:45

    To check the size of all of the directories within a directory, you can use:

    du -h --max-depth=1

    0 讨论(0)
  • 2020-12-12 09:48

    if you just want to see the aggregate size of the folder and probably in MB or GB format, please try the below script

    $du -s --block-size=M /path/to/your/directory/
    
    0 讨论(0)
提交回复
热议问题