S6-HIERCOPY(1)

NAME
s6-hiercopy - copy a directory structure recursively

SYNOPSIS
s6-hiercopy source destination

DESCRIPTION
s6-hiercopy recursively copies source to destination, which is created if it doesn't exist. The permissions are preserved. The owner and group are preserved if the user is the superuser.

It exits 0 on success and 111 on temporary failure.

Copying files and browsing through directories is one of Unix's weakest points, and s6-hiercopy is not meant to work around the problem; it's only a quick hack that I needed to boot my embedded platform. I originally planned to write the ultimate ‘cp’ utility, portable and reliable and featureful and everything - while needing approximately a hundred times less resources than GNU ‘cp’ does, of course. But I eventually dropped the idea: it's impossible to design, much less write, such a utility. Notably, you cannot make it reliable because Unix's set of filesystem management primitives is just too weak. It lacks a lot of atomic operations, and filesystem transactions. As a result, s6-hiercopy is a walking race condition and should absolutely not be considered instant when used in a multitasking environment. But then, ‘cp’ shouldn't either.

There is no standard way of creating device nodes on a filesystem, so any ‘cp’ -like utility is inherently non-portable. Fortunately, most systems still agree on the non-portable usages of the mknod specification[1], so things should work in practice. Consequently, the s6-hiercopy utility has been moved from s6-linux-utils[2] to s6-portable-utils.

EXIT STATUS

111 Temporary error.

100 Permanent error, such as a misuse.

127 Unable to execute program - not found.

126 Unable to execute program - other reason.

SEE ALSO
s6-basename(1), s6-cat(1), s6-chmod(1), s6-chown(1), s6-clock(1), s6-cut(1), s6-dirname(1), s6-dumpenv(1), s6-echo(1), s6-env(1), s6-expr(1), s6-false(1), s6-format-filter(1), s6-grep(1), s6-head(1), s6-linkname(1), s6-ln(1), s6-ls(1), s6-maximumtime(1), s6-mkdir(1), s6-mkfifo(1), s6-nice(1), s6-nuke(1), s6-pause(1), s6-printenv(1), s6-quote(1), s6-quote-filter(1), s6-rename(1), s6-rmrf(1), s6-seq(1), s6-sleep(1), s6-sort(1), s6-sync(1), s6-tai64ndiff(1), s6-tail(1), s6-touch(1), s6-true(1), s6-uniquename(1), s6-unquote(1), s6-unquote-filter(1), s6-update-symlinks(1), seekablepipe(1)

[1] https://pubs.opengroup.org/onlinepubs/9799919799/functions/mknod.html

[2] https://skarnet.org/software/s6-linux-utils/

This man page is ported from the authoritative documentation at: https://skarnet.org/software/s6-portable-utils/s6-hiercopy.html

AUTHORS
Laurent Bercot Alexis <flexibeast@gmail.com> (man page port)