help-bash
[Top][All Lists]
Advanced

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

Sorting directories by size


From: hancooper
Subject: Sorting directories by size
Date: Tue, 24 Aug 2021 13:46:20 +0000

‐‐‐‐‐‐‐ 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
40812   ./01cuneus/articles/detailed/advoc/eucd
59452   ./01cuneus/articles/detailed/advoc
4       
./01cuneus/articles/detailed/infocs/geoinforma/2018--gsdcoll--esc/gsdcoll--esc--files
34584   ./01cuneus/articles/detailed/infocs/geoinforma/2018--gsdcoll--esc
35460   ./01cuneus/articles/detailed/infocs/geoinforma
272     ./01cuneus/articles/detailed/infocs/informatic--files/tempora
8348    ./01cuneus/articles/detailed/infocs/informatic--files
132     ./01cuneus/articles/detailed/infocs/ntwrk--survl
43944   ./01cuneus/articles/detailed/infocs
4       ./01cuneus/articles/short/advoc/opendm/2019/q2
8       ./01cuneus/articles/short/advoc/opendm/2019
12      ./01cuneus/articles/short/advoc/opendm

Finally, the display of the sorted list should show the size in
human readable form.






reply via email to

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