#! /bin/sh # sparsefile - create sparse files conveniently # # depends on dd and dc commands. usage() { echo "usage: `basename $0` {10M|10G|10T} {filename}" 1>&2 } size=$1 if test "$size" = "-h"; then usage exit fi fnam=$2 die() { usage exit 1 } set -e units=`echo "$size" | sed 's!.*\(.\)$!\1!'` n=`echo "$size" | sed 's!\(.*\).$!\1!'` test "$units" && test "$n" && test "$units" != "$n" || die case "$units" in M) seek=`echo "$n 1024 * 1 - p" | dc` ;; G) seek=`echo "$n 1024 1024 * * 1 - p" | dc` ;; T) seek=`echo "$n 1024 1024 1024 * * * 1 - p" | dc` ;; *) die ;; esac sh -xc "dd bs=1k count=1 if=/dev/zero of=$fnam seek=$seek" ls -lh "$fnam"