#!/bin/sh # script-friendly df factor=1024 # for the default (GiB); use -H for GB optstring="H" while getopts "$optstring" opt; do case $opt in h) factor=1024 ;; # default (GiB) H) factor=1000 ;; # decimal (GB) esac done shift $((OPTIND-1)) target=${1:-.} if free_bytes=$(stat -f --format="%a*%S" "$target" 2>/dev/null); then # GNU stat (Linux) : 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"