help-bash
[Top][All Lists]
Advanced

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

Re: Sorting directories by size


From: Dennis Williamson
Subject: Re: Sorting directories by size
Date: Tue, 24 Aug 2021 09:07:34 -0500

On Tue, Aug 24, 2021, 8:46 AM hancooper <hancooper@protonmail.com> wrote:

> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> On Tuesday, August 24, 2021 1:35 PM, hancooper <hancooper@protonmail.com>
> wrote:
>
> > ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> > On Tuesday, August 24, 2021 12:52 PM, Alex fxmbsw7 Ratchev
> fxmbsw7@gmail.com wrote:
> >
> > > i guess you didnt set $dir
> > > On Tue, Aug 24, 2021, 14:12 hancooper hancooper@protonmail.com wrote:
> > >
> > > > ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> > > > On Tuesday, August 24, 2021 3:31 AM, Kerin Millar kfm@plushkava.net
> > > > wrote:
> > > >
> > > > > 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
> > > >
> > > > I agree with your assessment. Have seen that I get the following
> errer
> > > > find: ‘’: No such file or directory
> >
> > I would like to have the capability to print the directories with their
> size,
> > in the form of a table (size dir).
>
> Have used the following
>
>  sdr=$( find "$src" "${daggr[@]}" -type d -exec du {} +  \
>         | sort -zrn )
>  echo "$sdr"
>
> I am suspicious of the sorted results because I get
>
>
> bash: warning: command substitution: ignored null byte in input
> 17844
>  ./01cuneus/articles/detailed/advoc/privasec--2018/privasec--2018--files
> 18636   ./01cuneus/articles/detailed/advoc/privasec--2018
>
> [Snip]
>
> 12      ./01cuneus/articles/short/advoc/opendm
>
> Finally, the display of the sorted list should show the size in
> human readable form.
>
>


Take a look at https://stackoverflow.com/a/5213618 for ideas you might find
useful.

Note that my answer there doesn't properly handle filenames which include
newlines.

>


reply via email to

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