GNU bug report logs - #61105
cp/mv: want a fatal --no-clobber

Previous Next

Package: coreutils;

Reported by: Mike Frysinger <vapier <at> gentoo.org>

Date: Fri, 27 Jan 2023 20:53:02 UTC

Severity: normal

Done: Paul Eggert <eggert <at> cs.ucla.edu>

Bug is archived. No further changes may be made.

Full log


Message #8 received at 61105 <at> debbugs.gnu.org (full text, mbox):

From: Pádraig Brady <P <at> draigBrady.com>
To: Mike Frysinger <vapier <at> gentoo.org>, 61105 <at> debbugs.gnu.org
Subject: Re: bug#61105: cp/mv: want a fatal --no-clobber
Date: Fri, 27 Jan 2023 23:59:47 +0000
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




This bug report was last modified 2 years and 113 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.