Please check http://pubs.opengroup.org/onlinepubs/9699919799/utilities/du.html where the POSIX specifications are. It seems, that the Centos 5.7 version of du is not POSIX compliant, but will soon be. I have done my best to use only POSIX compliant syntax to assure the bug-free running on most systems. Unfortunately, I can't take care of every system and distribution, which chooses to defy POSIX syntax. For other people and myself, it would be a good idea to get the options of du on Centos 5.7, so please post 'du --help'.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I've just run across this issue as well. CentOS 6.2 is fine. Here is the output for "du --help" on CentOS. I apologize for the log cut and paste, I don't use Sourceforge often and I can't see a way to upload it as a file.
CentOS release 5.7 (Final)
Usage: du [OPTION]... [FILE]...
or: du [OPTION]... --files0-from=F
Summarize disk usage of each FILE, recursively for directories.
Mandatory arguments to long options are mandatory for short options too.
-a, --all write counts for all files, not just directories
--apparent-size print apparent sizes, rather than disk usage; although
the apparent size is usually smaller, it may be
larger due to holes in (`sparse') files, internal
fragmentation, indirect blocks, and the like
-B, --block-size=SIZE use SIZE-byte blocks
-b, --bytes equivalent to `--apparent-size --block-size=1'
-c, --total produce a grand total
-D, --dereference-args dereference FILEs that are symbolic links
--files0-from=F summarize disk usage of the NUL-terminated file
names specified in file F
-H like --si, but also evokes a warning; will soon
change to be equivalent to --dereference-args (-D)
-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)
--si like -h, but use powers of 1000 not 1024
-k like --block-size=1K
-l, --count-links count sizes many times if hard linked
-m like --block-size=1M
-L, --dereference dereference all symbolic links
-P, --no-dereference don't follow any symbolic links (this is the default)
-0, --null end each output line with 0 byte rather than newline
-S, --separate-dirs do not include size of subdirectories
-s, --summarize display only a total for each argument
-x, --one-file-system skip directories on different file systems
-X FILE, --exclude-from=FILE Exclude files that match any pattern in FILE.
--exclude=PATTERN Exclude files that match PATTERN.
--max-depth=N print the total for a directory (or file, with --all)
only if it is N or fewer levels below the command
line argument; --max-depth=0 is the same as
--summarize
--time show time of the last modification of any file in the
directory, or any of its subdirectories
--time=WORD show time as WORD instead of modification time:
atime, access, use, ctime or status
--time-style=STYLE show times using style STYLE:
full-iso, long-iso, iso, +FORMAT
FORMAT is interpreted like `date'
--help display this help and exit
--version output version information and exit
SIZE may be (or may be an integer optionally followed by) one of following:
kB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.
Report bugs to <bug-coreutils@gnu.org>.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Linux 2.6.18-92.1.22.el5 on x86_64
CentOS Linux 5.2
The du command does accepts the -H flag but generates a warning, it is clearly stated in the documentation, so the option to use is:
In the script itself, in line 1972,
You could change
echo `du -hsH "${CONFIG_backup_dir}"`
to:
echo `du -hk "${CONFIG_backup_dir}"`
du -hk, gives you the same effect of human readable and calculate size in --block-size=1K, the formating is not as neat when run from a script, so you may insert some line breaks in the script to format the output.
As requested, here is the du --help dump
Usage: du [OPTION]... [FILE]...
or: du [OPTION]... --files0-from=F
Summarize disk usage of each FILE, recursively for directories.
Mandatory arguments to long options are mandatory for short options too.
-a, --all write counts for all files, not just directories
--apparent-size print apparent sizes, rather than disk usage; although
the apparent size is usually smaller, it may be
larger due to holes in (`sparse') files, internal
fragmentation, indirect blocks, and the like
-B, --block-size=SIZE use SIZE-byte blocks
-b, --bytes equivalent to `--apparent-size --block-size=1'
-c, --total produce a grand total
-D, --dereference-args dereference FILEs that are symbolic links
--files0-from=F summarize disk usage of the NUL-terminated file
names specified in file F
-H like --si, but also evokes a warning; will soon
change to be equivalent to --dereference-args (-D)
-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)
--si like -h, but use powers of 1000 not 1024
-k like --block-size=1K
-l, --count-links count sizes many times if hard linked
-m like --block-size=1M
-L, --dereference dereference all symbolic links
-P, --no-dereference don't follow any symbolic links (this is the default)
-0, --null end each output line with 0 byte rather than newline
-S, --separate-dirs do not include size of subdirectories
-s, --summarize display only a total for each argument
-x, --one-file-system skip directories on different file systems
-X FILE, --exclude-from=FILE Exclude files that match any pattern in FILE.
--exclude=PATTERN Exclude files that match PATTERN.
--max-depth=N print the total for a directory (or file, with --all)
only if it is N or fewer levels below the command
line argument; --max-depth=0 is the same as
--summarize
--time show time of the last modification of any file in the
directory, or any of its subdirectories
--time=WORD show time as WORD instead of modification time:
atime, access, use, ctime or status
--time-style=STYLE show times using style STYLE:
full-iso, long-iso, iso, +FORMAT
FORMAT is interpreted like `date'
--help display this help and exit
--version output version information and exit
SIZE may be (or may be an integer optionally followed by) one of following:
kB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I'd like to see a fix for this too. For your information, my du version is
du (coreutils) 5.2.1
and in case it differs from the paste below.... my du --help is as follows:
Usage: du [OPTION]... [FILE]...
Summarize disk usage of each FILE, recursively for directories.
Mandatory arguments to long options are mandatory for short options too.
-a, --all write counts for all files, not just directories
--apparent-size print apparent sizes, rather than disk usage; although
the apparent size is usually smaller, it may be
larger due to holes in (`sparse') files, internal
fragmentation, indirect blocks, and the like
-B, --block-size=SIZE use SIZE-byte blocks
-b, --bytes equivalent to `--apparent-size --block-size=1'
-c, --total produce a grand total
-D, --dereference-args dereference FILEs that are symbolic links
-H like --si, but also evokes a warning; will soon
change to be equivalent to --dereference-args (-D)
-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)
--si like -h, but use powers of 1000 not 1024
-k, --kilobytes deprecated, like --block-size=1K
-l, --count-links count sizes many times if hard linked
-m, --megabytes deprecated, like --block-size=1M
-L, --dereference dereference all symbolic links
-P, --no-dereference don't follow any symbolic links (this is the default)
-0, --null end each output line with 0 byte rather than newline
-S, --separate-dirs do not include size of subdirectories
-s, --summarize display only a total for each argument
-x, --one-file-system skip directories on different filesystems
-X FILE, --exclude-from=FILE Exclude files that match any pattern in FILE.
--exclude=PATTERN Exclude files that match PATTERN.
--max-depth=N print the total for a directory (or file, with --all)
only if it is N or fewer levels below the command
line argument; --max-depth=0 is the same as
--summarize
--help display this help and exit
--version output version information and exit
SIZE may be (or may be an integer optionally followed by) one of following:
kB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The option -s is for summarizing and only outputting a total amount.
In case your backup directory is a symlink - should work fine - we want du to "follow" the symlink in the following way:
If a symbolic link is specified on the command line, du shall count the size of the file or file hierarchy referenced by the link.
That is exactly the option -H (see http://pubs.opengroup.org/onlinepubs/9699919799/utilities/du.html\). POSIX is a standard, on which you should rely when creating portable scripts. As earlier stated, on your OS the implementation of du is non-POSIX conform. As a result, options are misinterpreted. Instead of the dereferencing of arguments, on your systems, this leads to human readable (divided by 1000) output due to the -H option, while -h already did that (divided by 1024). The warning is issued, because in future versions of your OS the options are planned to be made conform with the POSIX standard.
If you want it to work correctly - as intended - you have to replace
echo `du -hsH "${CONFIG_backup_dir}"`
with
echo `du -hsD "${CONFIG_backup_dir}"`
.
This however is not an issue that has to be fixed in the script itself ... it is as portable as possible. You may also read my original comment.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Please check http://pubs.opengroup.org/onlinepubs/9699919799/utilities/du.html where the POSIX specifications are. It seems, that the Centos 5.7 version of du is not POSIX compliant, but will soon be. I have done my best to use only POSIX compliant syntax to assure the bug-free running on most systems. Unfortunately, I can't take care of every system and distribution, which chooses to defy POSIX syntax. For other people and myself, it would be a good idea to get the options of du on Centos 5.7, so please post 'du --help'.
I've just run across this issue as well. CentOS 6.2 is fine. Here is the output for "du --help" on CentOS. I apologize for the log cut and paste, I don't use Sourceforge often and I can't see a way to upload it as a file.
CentOS release 5.7 (Final)
Usage: du [OPTION]... [FILE]...
or: du [OPTION]... --files0-from=F
Summarize disk usage of each FILE, recursively for directories.
Mandatory arguments to long options are mandatory for short options too.
-a, --all write counts for all files, not just directories
--apparent-size print apparent sizes, rather than disk usage; although
the apparent size is usually smaller, it may be
larger due to holes in (`sparse') files, internal
fragmentation, indirect blocks, and the like
-B, --block-size=SIZE use SIZE-byte blocks
-b, --bytes equivalent to `--apparent-size --block-size=1'
-c, --total produce a grand total
-D, --dereference-args dereference FILEs that are symbolic links
--files0-from=F summarize disk usage of the NUL-terminated file
names specified in file F
-H like --si, but also evokes a warning; will soon
change to be equivalent to --dereference-args (-D)
-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)
--si like -h, but use powers of 1000 not 1024
-k like --block-size=1K
-l, --count-links count sizes many times if hard linked
-m like --block-size=1M
-L, --dereference dereference all symbolic links
-P, --no-dereference don't follow any symbolic links (this is the default)
-0, --null end each output line with 0 byte rather than newline
-S, --separate-dirs do not include size of subdirectories
-s, --summarize display only a total for each argument
-x, --one-file-system skip directories on different file systems
-X FILE, --exclude-from=FILE Exclude files that match any pattern in FILE.
--exclude=PATTERN Exclude files that match PATTERN.
--max-depth=N print the total for a directory (or file, with --all)
only if it is N or fewer levels below the command
line argument; --max-depth=0 is the same as
--summarize
--time show time of the last modification of any file in the
directory, or any of its subdirectories
--time=WORD show time as WORD instead of modification time:
atime, access, use, ctime or status
--time-style=STYLE show times using style STYLE:
full-iso, long-iso, iso, +FORMAT
FORMAT is interpreted like `date'
--help display this help and exit
--version output version information and exit
SIZE may be (or may be an integer optionally followed by) one of following:
kB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.
Report bugs to <bug-coreutils@gnu.org>.
Linux 2.6.18-92.1.22.el5 on x86_64
CentOS Linux 5.2
The du command does accepts the -H flag but generates a warning, it is clearly stated in the documentation, so the option to use is:
In the script itself, in line 1972,
You could change
echo `du -hsH "${CONFIG_backup_dir}"`
to:
echo `du -hk "${CONFIG_backup_dir}"`
du -hk, gives you the same effect of human readable and calculate size in --block-size=1K, the formating is not as neat when run from a script, so you may insert some line breaks in the script to format the output.
As requested, here is the du --help dump
Usage: du [OPTION]... [FILE]...
or: du [OPTION]... --files0-from=F
Summarize disk usage of each FILE, recursively for directories.
Mandatory arguments to long options are mandatory for short options too.
-a, --all write counts for all files, not just directories
--apparent-size print apparent sizes, rather than disk usage; although
the apparent size is usually smaller, it may be
larger due to holes in (`sparse') files, internal
fragmentation, indirect blocks, and the like
-B, --block-size=SIZE use SIZE-byte blocks
-b, --bytes equivalent to `--apparent-size --block-size=1'
-c, --total produce a grand total
-D, --dereference-args dereference FILEs that are symbolic links
--files0-from=F summarize disk usage of the NUL-terminated file
names specified in file F
-H like --si, but also evokes a warning; will soon
change to be equivalent to --dereference-args (-D)
-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)
--si like -h, but use powers of 1000 not 1024
-k like --block-size=1K
-l, --count-links count sizes many times if hard linked
-m like --block-size=1M
-L, --dereference dereference all symbolic links
-P, --no-dereference don't follow any symbolic links (this is the default)
-0, --null end each output line with 0 byte rather than newline
-S, --separate-dirs do not include size of subdirectories
-s, --summarize display only a total for each argument
-x, --one-file-system skip directories on different file systems
-X FILE, --exclude-from=FILE Exclude files that match any pattern in FILE.
--exclude=PATTERN Exclude files that match PATTERN.
--max-depth=N print the total for a directory (or file, with --all)
only if it is N or fewer levels below the command
line argument; --max-depth=0 is the same as
--summarize
--time show time of the last modification of any file in the
directory, or any of its subdirectories
--time=WORD show time as WORD instead of modification time:
atime, access, use, ctime or status
--time-style=STYLE show times using style STYLE:
full-iso, long-iso, iso, +FORMAT
FORMAT is interpreted like `date'
--help display this help and exit
--version output version information and exit
SIZE may be (or may be an integer optionally followed by) one of following:
kB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.
I'd like to see a fix for this too. For your information, my du version is
du (coreutils) 5.2.1
and in case it differs from the paste below.... my du --help is as follows:
Usage: du [OPTION]... [FILE]...
Summarize disk usage of each FILE, recursively for directories.
Mandatory arguments to long options are mandatory for short options too.
-a, --all write counts for all files, not just directories
--apparent-size print apparent sizes, rather than disk usage; although
the apparent size is usually smaller, it may be
larger due to holes in (`sparse') files, internal
fragmentation, indirect blocks, and the like
-B, --block-size=SIZE use SIZE-byte blocks
-b, --bytes equivalent to `--apparent-size --block-size=1'
-c, --total produce a grand total
-D, --dereference-args dereference FILEs that are symbolic links
-H like --si, but also evokes a warning; will soon
change to be equivalent to --dereference-args (-D)
-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)
--si like -h, but use powers of 1000 not 1024
-k, --kilobytes deprecated, like --block-size=1K
-l, --count-links count sizes many times if hard linked
-m, --megabytes deprecated, like --block-size=1M
-L, --dereference dereference all symbolic links
-P, --no-dereference don't follow any symbolic links (this is the default)
-0, --null end each output line with 0 byte rather than newline
-S, --separate-dirs do not include size of subdirectories
-s, --summarize display only a total for each argument
-x, --one-file-system skip directories on different filesystems
-X FILE, --exclude-from=FILE Exclude files that match any pattern in FILE.
--exclude=PATTERN Exclude files that match PATTERN.
--max-depth=N print the total for a directory (or file, with --all)
only if it is N or fewer levels below the command
line argument; --max-depth=0 is the same as
--summarize
--help display this help and exit
--version output version information and exit
SIZE may be (or may be an integer optionally followed by) one of following:
kB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.
The option -s is for summarizing and only outputting a total amount.
In case your backup directory is a symlink - should work fine - we want du to "follow" the symlink in the following way:
If a symbolic link is specified on the command line, du shall count the size of the file or file hierarchy referenced by the link.
That is exactly the option -H (see http://pubs.opengroup.org/onlinepubs/9699919799/utilities/du.html\). POSIX is a standard, on which you should rely when creating portable scripts. As earlier stated, on your OS the implementation of du is non-POSIX conform. As a result, options are misinterpreted. Instead of the dereferencing of arguments, on your systems, this leads to human readable (divided by 1000) output due to the -H option, while -h already did that (divided by 1024). The warning is issued, because in future versions of your OS the options are planned to be made conform with the POSIX standard.
If you want it to work correctly - as intended - you have to replace
echo `du -hsH "${CONFIG_backup_dir}"`
with
echo `du -hsD "${CONFIG_backup_dir}"`
.
This however is not an issue that has to be fixed in the script itself ... it is as portable as possible. You may also read my original comment.