s6-portable-utils: the s6-hiercopy program
Keywords: s6 linux administration root utilities hiercopy cp -a

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.