Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. #!/bin/bash -eu
  2.  
  3. if [ $# -gt 0 ]; then
  4. BASE_DIR="$(readlink -e "${1}")"; shift
  5. else
  6. BASE_DIR="$(readlink -e .)";
  7. fi
  8.  
  9. if [ $# -gt 0 ]; then
  10. (
  11. echo "usage:"
  12. echo " $0 [directory]"
  13. ) >&2
  14. exit 1
  15. fi
  16.  
  17. is_in() {
  18. [ $# -lt 1 ] && return 1
  19. seek="${1}"; shift
  20. for v in "${@}"; do
  21. [ "${v}" == "${seek}" ] && return 0
  22. done
  23. return 1
  24. }
  25.  
  26. declare -A SPECIAL
  27. SPECIAL[b]='block'
  28. SPECIAL[c]='char'
  29. SPECIAL[l]='symlink'
  30. SPECIAL[p]='pipe'
  31. SPECIAL[s]='socket'
  32.  
  33. find "${BASE_DIR}" -mindepth 1 -maxdepth 1 \
  34. | while read ent; do
  35. if mountpoint -q -- "${ent}"; then
  36. printf "%-8s${ent}\n" "mount" >&2
  37. else
  38. TYPE="$(stat -c '%A' "${ent}" | cut -b1)"
  39. if is_in "${TYPE}" "${!SPECIAL[@]}"; then
  40. printf "%-8s${ent}\n" "${SPECIAL[${TYPE}]}" >&2
  41. elif [ "${TYPE}" == "d" ]; then
  42. echo "${ent}/"
  43. elif [ "${TYPE}" == "-" ]; then
  44. echo "${ent}"
  45. else
  46. printf "%-8s${ent}\n" "unknown" >&2
  47. fi
  48. fi
  49. done \
  50. | xargs -rd '\n' du -bhsx -- \
  51. | sort -h
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement