On 03/01/18 15:01, Kamil Dudka wrote: > * src/mv.c (usage): Add note about the missing atomicity of 'mv -n'. > * doc/coreutils.texi (mv invocation): Likewise. > --- > doc/coreutils.texi | 3 +++ > src/mv.c | 2 ++ > 2 files changed, 5 insertions(+) > > diff --git a/doc/coreutils.texi b/doc/coreutils.texi > index 3fa083085..e7ca6a737 100644 > --- a/doc/coreutils.texi > +++ b/doc/coreutils.texi > @@ -9660,6 +9660,9 @@ If the response is not affirmative, the file is skipped. > Do not overwrite an existing file. > @mvOptsIfn > This option is mutually exclusive with @option{-b} or @option{--backup} > option. > +Note that the operation is not atomic. If @var{dest} appears after > +@command{mv} has checked its non-existence, it can be overwritten despite > +the @option{-n} option is used. > > @item -u > @itemx --update > diff --git a/src/mv.c b/src/mv.c > index a8df730a7..a08e75649 100644 > --- a/src/mv.c > +++ b/src/mv.c > @@ -306,6 +306,8 @@ Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.\n\ > -i, --interactive prompt before overwrite\n\ > -n, --no-clobber do not overwrite an existing file\n\ > If you specify more than one of -i, -f, -n, only the final one takes > effect.\n\ > +NOTE: The operation is not atomic. If DEST appears after mv has checked > its\n\ > +non-existence, it can be overwritten despite the -n option is used.\n\ > "), stdout); > fputs (_("\ > --strip-trailing-slashes remove any trailing slashes from each > SOURCE\n\
Eep, Seems like we should use RENAME_NOREPLACE in this case, rather than document the caveat? This is already used in shred. cheers, Pádraig