this post was submitted on 07 Apr 2024
137 points (96.6% liked)

Linux

48372 readers
2315 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

cross-posted from: https://discuss.tchncs.de/post/13814482

I just noticed that eza can now display total disk space used by directories!

I think this is pretty cool. I wanted it for a long time.

There are other ways to get the information of course. But having it integrated with all the other options for listing directories is fab. eza has features like --git-awareness, --tree display, clickable --hyperlink, filetype --icons and other display, permissions, dates, ownerships, and other stuff. being able to mash everything together in any arbitrary way which is useful is handy. And of course you can --sort=size

docs:

  --total-size               show the size of a directory as the size of all
                             files and directories inside (unix only)

It also (optionally) color codes the information. Values measures in kb, mb, and gb are clear. Here is a screenshot to show that:

eza --long -h --total-size --sort=oldest --no-permissions --no-user

Of course it take a little while to load large directories so you will not want to use by default.

Looks like it was first implemented Oct 2023 with some fixes since then. (Changelog). PR #533 - feat: added recursive directory parser with `--total-size` flag by Xemptuous

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 5 points 7 months ago* (last edited 7 months ago) (3 children)

Off topic, but maybe someone will appreciate this. I wrote a function to get the size of contents of a dir a while back. It has a couple of dependencies (gc, gwc at a glance), but should be fairly portable. The results are sorted from greatest to least as shown in the screenshot.


function szup() {

description='
#:    Title: szup
#: Synopsis: sort all items within a directory according to size
#:     Date: 2016-05-30
#:  Version: 0.0.5
#:  Options: -h | --help: print short usage info
#:         : -v | --version: print version number
'

funcname=$(echo "$description" | grep '^#:    Title: ' | sed 's/#:    Title: //g')
version=$(echo "$description" | grep '^#:  Version: ' | sed 's/#:  Version: //g')
updated="$(echo "$description" | grep '^#:     Date: ' | sed 's/#:     Date: //g')"

	function usage() {
		printf "\n%s\n" "$funcname : $version : $updated"
		printf "%s\n" ""
	}

	function sortdir() {
		Chars="$(printf "    %s" "inspecting " "$(pwd)" | wc -c)"
		divider=====================
		divider=$divider$divider$divider$divider
		format="    %-${Chars}.${Chars}s %35s\n"
		totalwidth="$(ls -1 | /usr/local/bin/gwc -L)"
		totalwidth=$(echo $totalwidth | grep -o [0-9]\\+)
		Chars=$(echo $Chars | grep -o [0-9]\\+)
		if [ "$totalwidth" -lt "$Chars" ]; then
			longestvar="$Chars"
		else
			longestvar="$totalwidth"
		fi
		shortervar=$(/Users/danyoung/bin/qc "$longestvar"*.8)
		shortervar=$(printf "%1.0f\n" "$shortervar")
		echo "$shortervar"
		printf "\n    %s\n" "inspecting $(pwd)"
		printf "    %$shortervar.${longestvar}s\n" "$divider"
		theOutput="$(du -hs "${theDir}"/* | gsort -hr)"
		Condensed="$(echo -n "$theOutput" | awk '{ print $1","$2 }')"
		unset arr
		declare -a arr
		arr=($(echo "$Condensed"))
		Count="$(echo "$(printf "%s\n" "${arr[@]}")" | wc -l)"
		Count=$((Count-1))
		for i in $(seq 1 $Count); do
		read var1 var2 <<< "$(printf "%s\n" "${arr[$i]}" | sed 's/,/ /g')"
		printf "   %5s    %-16s\n" "$var1" "${var2//\/*\//./}"
		done
		echo
	}

	case "$1" in
		-h|--help)
			usage
			return 0
			;;
		*)
			:
			;;
	esac

     if [ -z "$1" ]; then
             oldDir="$(pwd)"
             cd "${1}"
             local theDir="$(pwd)"
             sortdir
             cd "$oldDir"
             return 0
     else
     		:
             oldDir="$(pwd)"
             cd "${1}"
             local theDir="$(pwd)"
             sortdir
             cd "$oldDir"
             return 0
     fi
}```


Screenshot isn't working. I'll reply to this with it.
[–] Archr 8 points 7 months ago (1 children)

Is this effectively the same as: du -hs * | sort -h?

[–] [email protected] 2 points 7 months ago

Hahaha. I may have spent a lot of time creating a script to implement functionality that was already there. du -hs * | sort -h -r, I guess.

[–] [email protected] 2 points 7 months ago* (last edited 7 months ago) (1 children)

Thanks! I always appreciate another tool for this. I tried to run it but have dep issues.

What is gwc? I can't find a package by that name nor is it included that I can see.

Websearch finds GeoWebCache, Gnome Wave Cleaner, GtkWaveCleaner, several IT companies... nothing that looks relevant.

edit: also stumped looking for gsort. it seems to be associated with something called STATA which is statistical analysis software. Is that something you are involved with maybe running some special stuff on your system?

PS you missed a newline at the end before closing the code block which is why the image was showing up as markdown instead of displaying properly.

Change:

    }```

to:

    }
    ```
[–] [email protected] 1 points 7 months ago

Aha with the new line! Thank you!

I believe gwc and gsort are part of coreutils based on this:

$ gwc --help
Usage: gwc [OPTION]... [FILE]...
  or:  gwc [OPTION]... --files0-from=F
Print newline, word, and byte counts for each FILE, and a total line if
more than one FILE is specified.  A word is a nonempty sequence of non white
space delimited by white space characters or by start or end of input.

With no FILE, or when FILE is -, read standard input.

The options below may be used to select which counts are printed, always in
the following order: newline, word, character, byte, maximum line length.
  -c, --bytes            print the byte counts
  -m, --chars            print the character counts
  -l, --lines            print the newline counts
      --files0-from=F    read input from the files specified by
                           NUL-terminated names in file F;
                           If F is - then read names from standard input
  -L, --max-line-length  print the maximum display width
  -w, --words            print the word counts
      --total=WHEN       when to print a line with total counts;
                           WHEN can be: auto, always, only, never
      --help        display this help and exit
      --version     output version information and exit

GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Full documentation <https://www.gnu.org/software/coreutils/wc>
or available locally via: info '(coreutils) wc invocation'