aboutsummaryrefslogtreecommitdiffstats
s6-portable-utils: the s6-hiercopy program

s6-portable-utils
Software
skarnet.org

The s6-hiercopy program

s6-hiercopy copies a directory structure recursively.

Interface

     s6-hiercopy source destination
  • 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.

Notes

  • 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, so things should work in practice. Consequently, the s6-hiercopy utility has been moved from s6-linux-utils to s6-portable-utils.