On 27/01/2023 20:52, Mike Frysinger wrote:
i've been under the mistaken assumption that the -n/--no-clobber option exits non-zero when the target exists, but someone pointed out to me recently that it silently ignores existing files. can we get a setting to control this ?
Yes --no-clobber={skip (default), fail} would have some value. Especially for handling multiple files.
basically i've been writing things like: if ! cp -n foo bar; then ... error out because bar already exists, or otherwise failed ... fi when really i need to write: if [ -e bar ] || ! cp foo bar; then ... error out ... fi
The above is racy if the file is created between the test and the cp. I suppose you could leverage the shell to create the file atomically like: cp-n-fail() { (set -C && cat < "$1" > "$2") } cp-a-n-fail() { cp-n-fail "$1" "$2" && cp -a --attributes-only "$1" "$2" } But yes hack, only handles single files, doesn't handle sparseness, ... cheers, Pádraig