print-disc-blocks.sh 752 B

12345678910111213141516171819202122232425262728293031
  1. #!/usr/bin/env bash
  2. CYGWIN=0
  3. [[ $TERM = cygwin ]] && CYGWIN=1
  4. for src in "$@"
  5. do
  6. file="$(readlink -m "$src")"
  7. dir="${file%/*}"
  8. if ((CYGWIN))
  9. then
  10. dev="$( df "$dir" | awk '$1 ~ "^[A-Z]:" { print $1; exit }' )"
  11. else
  12. dev="$( df "$dir" | awk '$1 ~ "^/dev/" { print $1; exit }' )"
  13. fi
  14. inode="<$(stat -c%i "$file")>"
  15. usage=$(($(stat -c'%B/512*%b' "$file")/2048))
  16. size=$(($(stat -c%s "$file")/1024/1024))
  17. if ((1))
  18. then
  19. echo -n "$src -> $dev $inode, $usage/$size MiB, frag="
  20. DEBUGFS_PAGER=cat /sbin/debugfs "$dev" -R "stat $inode" 2>&1 \
  21. | sed -r '0,/^(EXTENTS|BLOCKS):/ d; s/, */\n/g' \
  22. | grep -vF '(IND)' \
  23. | wc -l
  24. else
  25. DEBUGFS_PAGER=cat /sbin/debugfs "$dev" -R "stat $inode"
  26. fi
  27. done