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