mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-04-12 06:57:33 +02:00
du: add -t SIZE, --threshold=SIZE option
* src/du.c (opt_threshold): Add variable to hold the value of the --threshold option specified by the user. (long_options): Add a required_argument entry for the new --threshold option. (usage): Add --threshold option. (process_file): Elide printing the entry if its size does not meet the value specified by the --threshold option. (main): In the argument parsing loop, add a case for the new -t option. Convert the given argument by permitting the well-known suffixes for megabyte, gigabytes, etc. Handle the special case "-0": give an error as this value is not permitted. * doc/coreutils.texi (du invocation): Add documentation for the above new option. * tests/du/threshold.sh: Add new test to exercise the new option. * tests/local.mk (all_tests): Mention the above test. Co-authored-by: Bernhard Voelker <mail@bernhard-voelker.de>
This commit is contained in:
committed by
Bernhard Voelker
parent
40b2770a22
commit
f8afbb424c
4
NEWS
4
NEWS
@@ -8,6 +8,10 @@ GNU coreutils NEWS -*- outline -*-
|
||||
to include in the output, or all available columns if the FIELD_LIST is
|
||||
omitted. Note this enables df to output both block and inode fields together.
|
||||
|
||||
du now accepts the --threshold=SIZE option to restrict the output to entries
|
||||
with such a minimum SIZE (or a maximum SIZE if it is negative).
|
||||
du recognizes -t SIZE as equivalent, for compatibility with FreeBSD.
|
||||
|
||||
** Bug fixes
|
||||
|
||||
cp --no-preserve=mode now no longer exits non-zero.
|
||||
|
||||
@@ -11022,6 +11022,41 @@ With @option{--separate-dirs}, the size reported for a directory name,
|
||||
@var{d}, is merely the @code{stat.st_size}-derived size of the directory
|
||||
entry, @var{d}.
|
||||
|
||||
@item -t @var{size}
|
||||
@item --threshold=@var{size}
|
||||
@opindex -t
|
||||
@opindex --threshold
|
||||
Exclude entries based on a given @var{size} (@pxref{Block size}).
|
||||
|
||||
If @var{size} is positive, then @command{du} will only print entries with a size
|
||||
greater than or equal to that.
|
||||
|
||||
If @var{size} is negative, then @command{du} will only print entries with a size
|
||||
smaller than or equal to that.
|
||||
|
||||
Although GNU @command{find} can be used to find files of a certain size,
|
||||
@command{du}'s @option{--threshold} option can be used to also filter
|
||||
directories based on a given size.
|
||||
|
||||
Please note that the @option{--threshold} option can be combined with the
|
||||
@option{--apparent-size} option, and in this case would elide entries based on
|
||||
its apparent size.
|
||||
|
||||
Here's how you would use @option{--threshold} to find directories with a size
|
||||
greater than or equal to 200 megabytes:
|
||||
|
||||
@example
|
||||
du --threshold=200MB
|
||||
@end example
|
||||
|
||||
Here's how you would use @option{--threshold} to find directories and files -
|
||||
note the @option{-a} - with an apparent size smaller than or equal to 500 bytes:
|
||||
|
||||
@example
|
||||
du -a -t -500 --apparent-size
|
||||
@end example
|
||||
|
||||
|
||||
@item --time
|
||||
@opindex --time
|
||||
@cindex last modified dates, displaying in @command{du}
|
||||
|
||||
34
src/du.c
34
src/du.c
@@ -147,6 +147,10 @@ static bool opt_separate_dirs = false;
|
||||
is at level 0, so 'du --max-depth=0' is equivalent to 'du -s'. */
|
||||
static size_t max_depth = SIZE_MAX;
|
||||
|
||||
/* Only output entries with at least this SIZE if positive,
|
||||
or at most if negative. See --threshold option. */
|
||||
static intmax_t opt_threshold = 0;
|
||||
|
||||
/* Human-readable options for output. */
|
||||
static int human_output_opts;
|
||||
|
||||
@@ -218,6 +222,7 @@ static struct option const long_options[] =
|
||||
{"separate-dirs", no_argument, NULL, 'S'},
|
||||
{"summarize", no_argument, NULL, 's'},
|
||||
{"total", no_argument, NULL, 'c'},
|
||||
{"threshold", required_argument, NULL, 't'},
|
||||
{"time", optional_argument, NULL, TIME_OPTION},
|
||||
{"time-style", required_argument, NULL, TIME_STYLE_OPTION},
|
||||
{GETOPT_HELP_OPTION_DECL},
|
||||
@@ -319,6 +324,8 @@ Mandatory arguments to long options are mandatory for short options too.\n\
|
||||
only if it is N or fewer levels below the command\n\
|
||||
line argument; --max-depth=0 is the same as\n\
|
||||
--summarize\n\
|
||||
-t, --threshold=SIZE exclude entries smaller than SIZE if positive,\n\
|
||||
or entries greater than SIZE if negative\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
--time show time of the last modification of any file in the\n\
|
||||
@@ -579,8 +586,15 @@ process_file (FTS *fts, FTSENT *ent)
|
||||
duinfo_add (&tot_dui, &dui);
|
||||
|
||||
if ((IS_DIR_TYPE (info) && level <= max_depth)
|
||||
|| ((opt_all && level <= max_depth) || level == 0))
|
||||
print_size (&dui_to_print, file);
|
||||
|| (opt_all && level <= max_depth)
|
||||
|| level == 0)
|
||||
{
|
||||
/* Print or elide this entry according to the --threshold option. */
|
||||
if (opt_threshold < 0
|
||||
? dui_to_print.size <= -opt_threshold
|
||||
: dui_to_print.size >= opt_threshold)
|
||||
print_size (&dui_to_print, file);
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
@@ -703,7 +717,7 @@ main (int argc, char **argv)
|
||||
while (true)
|
||||
{
|
||||
int oi = -1;
|
||||
int c = getopt_long (argc, argv, "0abd:chHklmsxB:DLPSX:",
|
||||
int c = getopt_long (argc, argv, "0abd:chHklmst:xB:DLPSX:",
|
||||
long_options, &oi);
|
||||
if (c == -1)
|
||||
break;
|
||||
@@ -784,6 +798,20 @@ main (int argc, char **argv)
|
||||
opt_summarize_only = true;
|
||||
break;
|
||||
|
||||
case 't':
|
||||
{
|
||||
enum strtol_error e;
|
||||
e = xstrtoimax (optarg, NULL, 0, &opt_threshold, "kKmMGTPEZY0");
|
||||
if (e != LONGINT_OK)
|
||||
xstrtol_fatal (e, oi, c, long_options, optarg);
|
||||
if (opt_threshold == 0 && *optarg == '-')
|
||||
{
|
||||
/* Do not allow -0, as this wouldn't make sense anyway. */
|
||||
error (EXIT_FAILURE, 0, _("invalid --threshold argument '-0'"));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
bit_flags |= FTS_XDEV;
|
||||
break;
|
||||
|
||||
360
tests/du/threshold.sh
Normal file
360
tests/du/threshold.sh
Normal file
@@ -0,0 +1,360 @@
|
||||
#!/bin/sh
|
||||
# Exercise du's --threshold option.
|
||||
|
||||
# Copyright (C) 2013 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
print_ver_ du
|
||||
|
||||
mkdir -p a/b a/c || framework_failure_
|
||||
|
||||
touch a/b/0 || framework_failure_
|
||||
printf '%1s' x > a/b/1 || framework_failure_
|
||||
printf '%2s' x > a/b/2 || framework_failure_
|
||||
printf '%3s' x > a/b/3 || framework_failure_
|
||||
|
||||
Ba=$(stat --format="%B * %b" a | xargs expr)
|
||||
Bb=$(stat --format="%B * %b" a/b | xargs expr)
|
||||
Bc=$(stat --format="%B * %b" a/c | xargs expr)
|
||||
B0=$(stat --format="%B * %b" a/b/0 | xargs expr)
|
||||
B1=$(stat --format="%B * %b" a/b/1 | xargs expr)
|
||||
B2=$(stat --format="%B * %b" a/b/2 | xargs expr)
|
||||
B3=$(stat --format="%B * %b" a/b/3 | xargs expr)
|
||||
|
||||
Sa=$(stat --format=%s a )
|
||||
Sb=$(stat --format=%s a/b )
|
||||
Sc=$(stat --format=%s a/c )
|
||||
S0=$(stat --format=%s a/b/0)
|
||||
S1=$(stat --format=%s a/b/1)
|
||||
S2=$(stat --format=%s a/b/2)
|
||||
S3=$(stat --format=%s a/b/3)
|
||||
|
||||
Bb0123=$(expr $Bb + $B0 + $B1 + $B2 + $B3)
|
||||
Sb0123=$(expr $Sb + $S0 + $S1 + $S2 + $S3)
|
||||
|
||||
Bab0123=$(expr $Ba + $Bc + $Bb0123)
|
||||
Sab0123=$(expr $Sa + $Sc + $Sb0123)
|
||||
|
||||
# Sanity checks
|
||||
test $Ba -gt 4 || skip_ "block size of a directory is smaller than 4 bytes"
|
||||
test $Bc -gt 4 || skip_ "block size of an empty directory is smaller than 4 \
|
||||
bytes"
|
||||
test $Sa -gt 4 || skip_ "apparent size of a directory is smaller than 4 bytes"
|
||||
test $B1 -gt 4 || skip_ "block size of small file smaller than 4 bytes"
|
||||
test $S3 -eq 3 || framework_failure_
|
||||
test $S2 -eq 2 || framework_failure_
|
||||
test $S1 -eq 1 || framework_failure_
|
||||
test $S0 -eq 0 || framework_failure_
|
||||
test $B0 -eq 0 || skip_ "block size of an empty file unequal Zero"
|
||||
# block size of a/b/1 == a/b/2
|
||||
test $B1 -eq $B2 || framework_failure_
|
||||
# a is bigger than a/b.
|
||||
test $Sab0123 -gt $Sb0123 || framework_failure_
|
||||
test $Bab0123 -gt $Bb0123 || framework_failure_
|
||||
# a/b is bigger than empty a/c.
|
||||
test $Sb0123 -gt $Sc || framework_failure_
|
||||
test $Bb0123 -gt $Bc || framework_failure_
|
||||
|
||||
# Exercise a bad argument: unparsable number.
|
||||
cat <<EOF > exp
|
||||
du: invalid --threshold argument 'SIZE'
|
||||
EOF
|
||||
du --threshold=SIZE a > out 2>&1 && fail=1
|
||||
compare exp out || fail=1
|
||||
|
||||
cat <<EOF > exp
|
||||
du: invalid -t argument 'SIZE'
|
||||
EOF
|
||||
du -t SIZE a > out 2>&1 && fail=1
|
||||
compare exp out || fail=1
|
||||
|
||||
# Exercise a bad argument: -0 is not valid.
|
||||
cat <<EOF > exp
|
||||
du: invalid --threshold argument '-0'
|
||||
EOF
|
||||
du --threshold=-0 a > out 2>&1 && fail=1
|
||||
compare exp out || fail=1
|
||||
|
||||
du -t -0 a > out 2>&1 && fail=1
|
||||
compare exp out || fail=1
|
||||
|
||||
du -t-0 a > out 2>&1 && fail=1
|
||||
compare exp out || fail=1
|
||||
|
||||
# Exercise a bad argument: empty argument.
|
||||
cat <<EOF > exp
|
||||
du: invalid --threshold argument ''
|
||||
EOF
|
||||
du --threshold= a > out 2>&1 && fail=1
|
||||
compare exp out || fail=1
|
||||
|
||||
# Exercise a bad argument: no argument.
|
||||
du --threshold > out 2>&1 && fail=1
|
||||
cat <<EOF > exp
|
||||
du: option '--threshold' requires an argument
|
||||
Try 'du --help' for more information.
|
||||
EOF
|
||||
compare exp out || fail=1
|
||||
rm -f out
|
||||
|
||||
dutest ()
|
||||
{
|
||||
args="$1"
|
||||
exp="$2"
|
||||
|
||||
rm -f exp out
|
||||
|
||||
# Expected output.
|
||||
if [ "$exp" = "" ] ; then
|
||||
touch exp
|
||||
else
|
||||
printf "%s " $exp | tr ' ' "\n" > exp
|
||||
fi
|
||||
|
||||
rc=0
|
||||
du -B1 $args a > out1 2>&1 || { cat out1 ; rc=1 ; }
|
||||
|
||||
# Remove the size column and sort the output.
|
||||
sed 's/^[0-9]*\t//' < out1 | LANG=C sort -o out || framework_failure_
|
||||
|
||||
compare exp out || { cat out1 ; rc=1 ; }
|
||||
return $rc
|
||||
}
|
||||
|
||||
# Check numbers around the total size of the main directory 'a'.
|
||||
# One byte greater than 'a'.
|
||||
s=$(expr $Sab0123 + 1) # apparent size
|
||||
dutest "--app -t $s" '' || fail=1
|
||||
dutest "--app -a -t $s" '' || fail=1
|
||||
dutest "--app -S -t $s" '' || fail=1
|
||||
dutest "--app -a -S -t $s" '' || fail=1
|
||||
dutest "--app -t -$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a -t -$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest "--app -S -t -$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a -S -t -$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
s=$(expr $Bab0123 + 1) # block size
|
||||
dutest " -t $s" '' || fail=1
|
||||
dutest " -a -t $s" '' || fail=1
|
||||
dutest " -S -t $s" '' || fail=1
|
||||
dutest " -a -S -t $s" '' || fail=1
|
||||
dutest " -t -$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a -t -$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S -t -$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a -S -t -$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
|
||||
# Exactly the size of 'a'.
|
||||
s=$Sab0123 # apparent size
|
||||
dutest "--app --th=$s" 'a' || fail=1
|
||||
dutest "--app -a --th=$s" 'a' || fail=1
|
||||
dutest "--app -S --th=$s" '' || fail=1
|
||||
dutest "--app -a -S --th=$s" '' || fail=1
|
||||
dutest "--app --th=-$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a --th=-$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest "--app -S --th=-$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a -S --th=-$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
s=$Bab0123 # block size
|
||||
dutest " --th=$s" 'a' || fail=1
|
||||
dutest " -a --th=$s" 'a' || fail=1
|
||||
dutest " -S --th=$s" '' || fail=1
|
||||
dutest " -a -S --th=$s" '' || fail=1
|
||||
dutest " --th=-$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a --th=-$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S --th=-$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a -S --th=-$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
|
||||
# One byte smaller than 'a'.
|
||||
s=$(expr $Sab0123 - 1) # apparent size
|
||||
dutest "--app --th=$s" 'a' || fail=1
|
||||
dutest "--app -a --th=$s" 'a' || fail=1
|
||||
dutest "--app -S --th=$s" '' || fail=1
|
||||
dutest "--app -a -S --th=$s" '' || fail=1
|
||||
dutest "--app --th=-$s" 'a/b a/c' || fail=1
|
||||
dutest "--app -a --th=-$s" 'a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest "--app -S --th=-$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a -S --th=-$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
s=$(expr $Bab0123 - 1) # block size
|
||||
dutest " --th=$s" 'a' || fail=1
|
||||
dutest " -a --th=$s" 'a' || fail=1
|
||||
dutest " -S --th=$s" '' || fail=1
|
||||
dutest " -a -S --th=$s" '' || fail=1
|
||||
dutest " --th=-$s" 'a/b a/c' || fail=1
|
||||
dutest " -a --th=-$s" 'a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S --th=-$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a -S --th=-$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
|
||||
|
||||
# Check numbers around the total size of the sub directory 'a/b'.
|
||||
# One byte greater than 'a/b'.
|
||||
s=$(expr $Sb0123 + 1) # apparent size
|
||||
dutest "--app --th=$s" 'a' || fail=1
|
||||
dutest "--app -a --th=$s" 'a' || fail=1
|
||||
dutest "--app -S --th=$s" '' || fail=1
|
||||
dutest "--app -a -S --th=$s" '' || fail=1
|
||||
dutest "--app --th=-$s" 'a/b a/c' || fail=1
|
||||
dutest "--app -a --th=-$s" 'a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest "--app -S --th=-$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a -S --th=-$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
s=$(expr $Bb0123 + 1) # block size
|
||||
dutest " --th=$s" 'a' || fail=1
|
||||
dutest " -a --th=$s" 'a' || fail=1
|
||||
dutest " -S --th=$s" '' || fail=1
|
||||
dutest " -a -S --th=$s" '' || fail=1
|
||||
dutest " --th=-$s" 'a/b a/c' || fail=1
|
||||
dutest " -a --th=-$s" 'a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S --th=-$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a -S --th=-$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
|
||||
# Exactly the size of 'a/b'.
|
||||
s=$Sb0123 # apparent size
|
||||
dutest "--app --th=$s" 'a a/b' || fail=1
|
||||
dutest "--app -a --th=$s" 'a a/b' || fail=1
|
||||
dutest "--app -S --th=$s" 'a/b' || fail=1
|
||||
dutest "--app -a -S --th=$s" 'a/b' || fail=1
|
||||
dutest "--app --th=-$s" 'a/b a/c' || fail=1
|
||||
dutest "--app -a --th=-$s" 'a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest "--app -S --th=-$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a -S --th=-$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
s=$Bb0123 # block size
|
||||
dutest " --th=$s" 'a a/b' || fail=1
|
||||
dutest " -a --th=$s" 'a a/b' || fail=1
|
||||
dutest " -S --th=$s" 'a/b' || fail=1
|
||||
dutest " -a -S --th=$s" 'a/b' || fail=1
|
||||
dutest " --th=-$s" 'a/b a/c' || fail=1
|
||||
dutest " -a --th=-$s" 'a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S --th=-$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a -S --th=-$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
|
||||
# One byte smaller than 'a/b'.
|
||||
s=$(expr $Sb0123 - 1) # apparent size
|
||||
dutest "--app --th=$s" 'a a/b' || fail=1
|
||||
dutest "--app -a --th=$s" 'a a/b' || fail=1
|
||||
dutest "--app -S --th=$s" 'a/b' || fail=1
|
||||
dutest "--app -a -S --th=$s" 'a/b' || fail=1
|
||||
dutest "--app --th=-$s" 'a/c' || fail=1
|
||||
dutest "--app -a --th=-$s" 'a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest "--app -S --th=-$s" 'a a/c' || fail=1
|
||||
dutest "--app -a -S --th=-$s" 'a a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
s=$(expr $Bb0123 - 1) # block size
|
||||
dutest " --th=$s" 'a a/b' || fail=1
|
||||
dutest " -a --th=$s" 'a a/b' || fail=1
|
||||
dutest " -S --th=$s" 'a/b' || fail=1
|
||||
dutest " -a -S --th=$s" 'a/b' || fail=1
|
||||
dutest " --th=-$s" 'a/c' || fail=1
|
||||
dutest " -a --th=-$s" 'a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S --th=-$s" 'a a/c' || fail=1
|
||||
dutest " -a -S --th=-$s" 'a a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
|
||||
|
||||
# Check numbers around the total size of the files a/b/[0123]'.
|
||||
echo One byte greater than 'a/b/3'.
|
||||
s=$(expr $S3 + 1) # apparent size
|
||||
dutest "--app --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -S --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a -S --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app --th=-$s" '' || fail=1
|
||||
dutest "--app -a --th=-$s" 'a/b/0 a/b/1 a/b/2 a/b/3' || fail=1
|
||||
dutest "--app -S --th=-$s" '' || fail=1
|
||||
dutest "--app -a -S --th=-$s" 'a/b/0 a/b/1 a/b/2 a/b/3' || fail=1
|
||||
s=$(expr $B3 + 1) # block size
|
||||
dutest " --th=$s" 'a a/b' || fail=1
|
||||
dutest " -a --th=$s" 'a a/b' || fail=1
|
||||
dutest " -S --th=$s" 'a/b' || fail=1
|
||||
dutest " -a -S --th=$s" 'a/b' || fail=1
|
||||
dutest " --th=-$s" 'a/c' || fail=1
|
||||
dutest " -a --th=-$s" 'a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S --th=-$s" 'a a/c' || fail=1
|
||||
dutest " -a -S --th=-$s" 'a a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
|
||||
# Exactly the size of 'a/b/3'.
|
||||
echo Exactly the size of 'a/b/3'.
|
||||
s=$S3 # apparent size
|
||||
dutest "--app --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a --th=$s" 'a a/b a/b/3 a/c' || fail=1
|
||||
dutest "--app -S --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a -S --th=$s" 'a a/b a/b/3 a/c' || fail=1
|
||||
dutest "--app --th=-$s" '' || fail=1
|
||||
dutest "--app -a --th=-$s" 'a/b/0 a/b/1 a/b/2 a/b/3' || fail=1
|
||||
dutest "--app -S --th=-$s" '' || fail=1
|
||||
dutest "--app -a -S --th=-$s" 'a/b/0 a/b/1 a/b/2 a/b/3' || fail=1
|
||||
s=$B3 # block size
|
||||
dutest " --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a --th=$s" 'a a/b a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a -S --th=$s" 'a a/b a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " --th=-$s" 'a/c' || fail=1
|
||||
dutest " -a --th=-$s" 'a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S --th=-$s" 'a a/c' || fail=1
|
||||
dutest " -a -S --th=-$s" 'a a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
|
||||
# Exactly the size of 'a/b/2'.
|
||||
echo Exactly the size of 'a/b/2'.
|
||||
s=$S2 # apparent size
|
||||
dutest "--app --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a --th=$s" 'a a/b a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest "--app -S --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a -S --th=$s" 'a a/b a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest "--app --th=-$s" '' || fail=1
|
||||
dutest "--app -a --th=-$s" 'a/b/0 a/b/1 a/b/2' || fail=1
|
||||
dutest "--app -S --th=-$s" '' || fail=1
|
||||
dutest "--app -a -S --th=-$s" 'a/b/0 a/b/1 a/b/2' || fail=1
|
||||
s=$B2 # block size
|
||||
dutest " --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a --th=$s" 'a a/b a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a -S --th=$s" 'a a/b a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " --th=-$s" 'a/c' || fail=1
|
||||
dutest " -a --th=-$s" 'a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S --th=-$s" 'a a/c' || fail=1
|
||||
dutest " -a -S --th=-$s" 'a a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
|
||||
# Exactly the size of 'a/b/1'.
|
||||
echo Exactly the size of 'a/b/1'.
|
||||
s=$S1 # apparent size
|
||||
dutest "--app --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a --th=$s" 'a a/b a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest "--app -S --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a -S --th=$s" 'a a/b a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest "--app --th=-$s" '' || fail=1
|
||||
dutest "--app -a --th=-$s" 'a/b/0 a/b/1' || fail=1
|
||||
dutest "--app -S --th=-$s" '' || fail=1
|
||||
dutest "--app -a -S --th=-$s" 'a/b/0 a/b/1' || fail=1
|
||||
s=$B1 # block size
|
||||
dutest " --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a --th=$s" 'a a/b a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a -S --th=$s" 'a a/b a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " --th=-$s" 'a/c' || fail=1
|
||||
dutest " -a --th=-$s" 'a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S --th=-$s" 'a a/c' || fail=1
|
||||
dutest " -a -S --th=-$s" 'a a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
|
||||
# Exactly the size of 'a/b/0'.
|
||||
echo Exactly the size of 'a/b/0'.
|
||||
s=$S0 # apparent size
|
||||
dutest "--app --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a --th=$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest "--app -S --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest "--app -a -S --th=$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
# (maximum tests (-0) not possible).
|
||||
s=$B0 # block size
|
||||
dutest " --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a --th=$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
dutest " -S --th=$s" 'a a/b a/c' || fail=1
|
||||
dutest " -a -S --th=$s" 'a a/b a/b/0 a/b/1 a/b/2 a/b/3 a/c' || fail=1
|
||||
# (maximum tests (-0) not possible).
|
||||
|
||||
Exit $fail
|
||||
@@ -497,6 +497,7 @@ all_tests = \
|
||||
tests/du/one-file-system.sh \
|
||||
tests/du/restore-wd.sh \
|
||||
tests/du/slash.sh \
|
||||
tests/du/threshold.sh \
|
||||
tests/du/trailing-slash.sh \
|
||||
tests/du/two-args.sh \
|
||||
tests/id/gnu-zero-uids.sh \
|
||||
|
||||
Reference in New Issue
Block a user