help-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Sorting directories by size


From: Kerin Millar
Subject: Re: Sorting directories by size
Date: Tue, 24 Aug 2021 04:31:56 +0100

On Tue, 24 Aug 2021 02:21:28 +0000
hancooper via <help-bash@gnu.org> wrote:

> I have a directory stored in `dir`. I want to store the names of directories 
> at a particular level
> and sort them by size.
> 
> I have started with listing the directory names in `dlc` and computing the 
> total number of
> directories present. But still have to sort `dlc` by size, the with the 
> biggest first.
> 
> My initial plan is to use a command such as `du -h | sort -h`.
> 
> daggr=( -mindepth "$depth" -maxdepth "$depth" )
> dlc=$( find "$dir" "${daggr[@]}" -type d | tr "\n" " " )
> ndr=$( echo "$dlc;" | grep -o " " | wc -l )

The last two of these three commands should be jettisoned. Further, you ought 
to be using an array to store the directory names. As you appear to be using 
GNU, consider the following.

daggr=(-mindepth "$depth" -maxdepth "$depth")
mapfile -td '' dlc < <(find "$dir" "${daggr[@]}" -type d -exec du -0 {} + | 
sort -zrn | cut -z -f2-)
ndr=${#dlc[@]}

This relies on the fact that GNU du(1), given the -0 option, employs an output 
format of "%d\t%s\0", <size>, <pathname>.

-- 
Kerin Millar



reply via email to

[Prev in Thread] Current Thread [Next in Thread]