🐛 free-gigs: make it more portable

This commit is contained in:
neingeist 2025-08-26 23:03:13 +02:00
parent c17ba1bd8c
commit beba25bd1f

View file

@ -1,20 +1,29 @@
#!/bin/bash #!/bin/sh
# script-friendly df # script-friendly df
factor=1024 # default factor=1024 # for the default (GiB); use -H for GB
OPTSTRING="H" optstring="H"
while getopts ${OPTSTRING} opt; do while getopts "$optstring" opt; do
case ${opt} in case $opt in
H) h) factor=1024 ;; # default (GiB)
factor=1000 H) factor=1000 ;; # decimal (GB)
;;
esac esac
done done
shift $((OPTIND-1)) shift $((OPTIND-1))
target=${1:-.} target=${1:-.}
free_bytes=$(findmnt --df -T "$target" -oAVAIL --bytes | sed '1d') if free_bytes=$(stat -f --format="%a*%S" "$target" 2>/dev/null); then
free_gigs=$((free_bytes/(factor**3))) # GNU stat (Linux)
echo $free_gigs :
elif free_bytes=$(stat -f "%a*%S" "$target" 2>/dev/null); then
# BSD/macOS stat
:
else
# BusyBox stat fallback
free_bytes=$(stat -f "$target" | awk '/Block size:/ {bs=$3} /Available:/ {av=$2} END {print av*bs}')
fi
free_gb=$((free_bytes / factor / factor / factor))
echo "$free_gb"