GNU bug report logs -
#69532
mv's new -x option should be made orthogonal to -t/-T/default
Previous Next
Reported by: Paul Eggert <eggert <at> cs.ucla.edu>
Date: Mon, 4 Mar 2024 00:46:01 UTC
Severity: normal
Done: Paul Eggert <eggert <at> cs.ucla.edu>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
On 3/20/24 15:53, Bernhard Voelker wrote:
> $ echo 1 > a
> $ mkdir d
> $ echo 2 > d/a
> $ src/mv -v --exchange a a a d
> renamed 'a' -> 'd/a'
> renamed 'a' -> 'd/a'
> renamed 'a' -> 'd/a'
> $ cat a
> 2
> $ src/mv -v --exchange a a a d
> renamed 'a' -> 'd/a'
> renamed 'a' -> 'd/a'
> renamed 'a' -> 'd/a'
> $ cat a
> 1
> $ src/mv -v --exchange a a a a d
> renamed 'a' -> 'd/a'
> renamed 'a' -> 'd/a'
> renamed 'a' -> 'd/a'
> renamed 'a' -> 'd/a'
> $ cat a
> 1
Yes, that's the expected behavior for this contrived case. Just as one
would get odd behavior if one did the same thing without --exchange.
> I remember some implementation where mv(1) really was just a rename(2),
> which failed when crossing file systems. Was it some HP-UX or Solaris mv(1)?
I doubt it. Even 7th Edition 'mv' (1979) fell back on 'cp' when the link
syscall failed (this was before 'rename' existed).
> My point is that "exchange" is a different functionality.
Yes, but it's closely related. Arguably --backup is also a different
functionality too (and arguably --exchange is simply an alternative
backup scheme!) but 'mv' has --backup.
> - How large is the useful overlap with the existing code of mv(1)?
> Not much: no traditional rename nor copy.
I don't follow this point. The code change was fairly small, which
indicates there was a lot of overlap with existing functionality.
> - How large is the useful overlap with the existing options/modes of mv(1)?
> - exchange contradicts --backup,
That could be fixed for regular files, if there's a need, by backing up
the destination via 'link' before exchanging. For directories it's
admittedly a problem, but that's also the case for plain 'mv' (or for
'cp' or 'ln', for that matter) so there's not much new here.
> - exchange is not useful together with options working with a regular
> rename of copy, at least: --update, -Z, -n.
It should work with --update and -Z. -n of course is logically
incompatible, but this not the only set of logically incompatible
options (e.g., -t vs -T).
> - not sure if exchange works well together with -f.
What problems do you see there?
> why does exchange not work to exchange a regular with a
> directory file?
It works. I don't see a problem there.
$ touch a
$ mkdir d
$ ./mv -T --exchange a d
$ ls -ld a d
drwxr-xr-x. 2 eggert eggert 4096 Mar 20 16:52 a
-rw-r--r--. 1 eggert eggert 0 Mar 20 16:52 d
> Finally, the test cases are very sparse:
Feel free to add some. :-)
This bug report was last modified 1 year and 153 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.