bug#81377: mv -Tn suceeds if target directory exists, no error printed
Pádraig Brady <[email protected]> Wed, 8 Jul 2026 19:07:46 +0100
| Newsgroups | gmane.comp.gnu.core-utils.bugs |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --------------QjFFdvy4nHjKa70PJ5tQrMN3 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 08/07/2026 13:51, Florian Weimer via GNU coreutils Bug Reports wrote: > * Florian Weimer via: > >> Based on the documentation, I would have expected an error in this case. >> >> mkdir a a/1 b b/2 >> mv -Tn a b >> >> Exit status is zero. The only relevant system call in the strace output >> is this one: >> >> renameat2(AT_FDCWD, "a", AT_FDCWD, "b", RENAME_NOREPLACE) = -1 EEXIST (File exists) Right the documentation got out of sync a bit. We changed the behavior to exiting with failure in: https://github.com/coreutils/coreutils/commit/7a69df889 Though there was push back on that due to scripts breaking, so it was reverted in: https://github.com/coreutils/coreutils/commit/9907b6f5d However I failed to update the mv -n info docs accordingly. In some quick testing here I see mv -n silently fails on solaris, but (like Linux) silently skips on FreeBSD. So we should deprecate (non POSIX) -n for mv as we've already done for cp. I'll push the attached to address this documentation issue. >> >> Seen with: coreutils-9.7-9.fc43.x86_64 > > I see that there is a hint in the -n description that the exit status > may not be what users expects. But it means that this claim in the > manual is slightly misleading: > > | However, if ‘mv -T /tmp/source /tmp/dest’ succeeds, there is no > | question that ‘/tmp/source’ was renamed to ‘/tmp/dest’. The above is OK I think, as it doesn't mention -n. Marking this as done. thanks, Padraig --------------QjFFdvy4nHjKa70PJ5tQrMN3 Content-Type: text/x-patch; charset=UTF-8; name="mv-n-doc.patch" Content-Disposition: attachment; filename="mv-n-doc.patch" Content-Transfer-Encoding: base64 RnJvbSA1MzkyNmJhN2Q4N2UyOThiYTgzNjE2ODFkMjlmNmZlZmQyNTZiMDgyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/UD1DMz1BMWRyYWlnPTIwQnJhZHk/ PSA8UEBkcmFpZ0JyYWR5LmNvbT4KRGF0ZTogV2VkLCA4IEp1bCAyMDI2IDE4OjU1OjM0ICsw MTAwClN1YmplY3Q6IFtQQVRDSF0gZG9jOiBmaXggZGVzY3JpcHRpb24gb2YgbXYgLW4KClRo ZSBkZXNjcmlwdGlvbiBvZiBtdiAtLW5vLWNsb2JiZXIgZ290IG91dCBvZiBzeW5jCmJldHdl ZW4gY29tbWl0IHY5LjEtMTMzLWc3YTY5ZGY4ODkgYW5kIHY5LjQtMTM0LWc5OTA3YjZmNWQK CiogZG9jL2NvcmV1dGlscy50ZXhpIChtdiBpbnZvY2F0aW9uKTogQ29weSBtb3N0IG9mIHRo ZSAtbgpkZXNjcmlwdGlvbiBmcm9tIHRoZSBjcCAtLW5vLWNsb2JiZXIgZGVzY3JpcHRpb24u Ciogc3JjL212LmMgKHVzYWdlKTogTGlrZXdpc2UuICBOb3RlIHRoaXMgZXhwbGljaXRseSBk ZXByZWN0YXRlcwp0aGUgbXYgLW4gb3B0aW9uIGFzIGxpa2UgY3AgdGhlIGV4aXQgY29kZSB2 YXJpZXMgYWNyb3NzIHBsYXRmb3Jtcy4KU29sYXJpcyAxMSB3YXMgc2VlbiB0byBzaWxlbnRs eSBmYWlsLCB3aGlsZSBMaW51eC9GcmVlQlNEIHN1Y2NlZWQuCkZpeGVzIGh0dHBzOi8vYnVn cy5nbnUub3JnLzgxMzc3Ci0tLQogZG9jL2NvcmV1dGlscy50ZXhpIHwgMjQgKysrKysrKysr KysrKystLS0tLS0tLS0tCiBzcmMvbXYuYyAgICAgICAgICAgfCAgMiArLQogMiBmaWxlcyBj aGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9kb2MvY29yZXV0aWxzLnRleGkgYi9kb2MvY29yZXV0aWxzLnRleGkKaW5kZXggMjliYWY1 NzEwLi5kM2UzNzIzYzEgMTAwNjQ0Ci0tLSBhL2RvYy9jb3JldXRpbHMudGV4aQorKysgYi9k b2MvY29yZXV0aWxzLnRleGkKQEAgLTg4NzUsMTUgKzg4NzUsMjQgQEAgdG8gY2F1c2UgQGNv bW1hbmR7Y3B9IHdyaXRlIHRvIGFyYml0cmFyeSB0YXJnZXQgZGlyZWN0b3JpZXMuCiBAb3B0 SXRlbXh7Y3AsLS1saW5rLH0KIE1ha2UgaGFyZCBsaW5rcyBpbnN0ZWFkIG9mIGNvcGllcyBv ZiBub24tZGlyZWN0b3JpZXMuCiAKLUBvcHRJdGVte2NwLC1uLH0KLUBvcHRJdGVteHtjcCwt LW5vLWNsb2JiZXIsfQorQG1hY3JvIG5vQ2xvYmJlck9wdGlvbntjbWR9CitAb3B0SXRlbXtc Y21kXCwtbix9CitAb3B0SXRlbXh7XGNtZFwsLS1uby1jbG9iYmVyLH0KK0BjaW5kZXggcHJv bXB0cywgb21pdHRpbmcKIERvIG5vdCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgZmlsZTsgc2ls ZW50bHkgc2tpcCBpbnN0ZWFkLgorQGlmc2V0IE1WX0NPTU1BTkQKK0Btdk9wdHNJZm4KK0Bl bmQgaWZzZXQKK0BpZmNsZWFyIE1WX0NPTU1BTkQKIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyBh IHByZXZpb3VzIEBvcHRpb257LWl9IG9wdGlvbi4KK0BlbmQgaWZjbGVhcgogVGhpcyBvcHRp b24gaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggQG9wdGlvbnstYn0gb3IgQG9wdGlvbnst LWJhY2t1cH0gb3B0aW9uLgogVGhpcyBvcHRpb24gaXMgZGVwcmVjYXRlZCBkdWUgdG8gaGF2 aW5nIGEgZGlmZmVyZW50IGV4aXQgc3RhdHVzIGZyb20KIG90aGVyIHBsYXRmb3Jtcy4gIFNl ZSBhbHNvIHRoZSBAb3B0aW9uey0tdXBkYXRlfSBvcHRpb24gd2hpY2ggd2lsbAogZ2l2ZSBt b3JlIGNvbnRyb2wgb3ZlciBob3cgdG8gZGVhbCB3aXRoIGV4aXN0aW5nIGZpbGVzIGluIHRo ZSBkZXN0aW5hdGlvbiwKIGFuZCBvdmVyIHRoZSBleGl0IHN0YXR1cyBpbiBwYXJ0aWN1bGFy LgorQGVuZCBtYWNybworQG5vQ2xvYmJlck9wdGlvbntjcH0KIAogQG9wdEl0ZW17Y3AsLXAs fQogQG9wdEl0ZW14e2NwLC0tcHJlc2VydmUsWz1AdmFye2F0dHJpYnV0ZV9saXN0fV19CkBA IC0xMDAxNSwxNCArMTAwMjQsOSBAQCBQcm9tcHQgd2hldGhlciB0byBvdmVyd3JpdGUgZWFj aCBleGlzdGluZyBkZXN0aW5hdGlvbiBmaWxlLCByZWdhcmRsZXNzCiBvZiBpdHMgcGVybWlz c2lvbnMsIGFuZCBmYWlsIGlmIHRoZSByZXNwb25zZSBpcyBub3QgYWZmaXJtYXRpdmUuCiBA bXZPcHRzSWZuCiAKLUBvcHRJdGVte212LC1uLH0KLUBvcHRJdGVteHttdiwtLW5vLWNsb2Ji ZXIsfQotQGNpbmRleCBwcm9tcHRzLCBvbWl0dGluZwotRG8gbm90IG92ZXJ3cml0ZSBhbiBl eGlzdGluZyBmaWxlOyBzaWxlbnRseSBmYWlsIGluc3RlYWQuCi1AbXZPcHRzSWZuCi1UaGlz IG9wdGlvbiBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBAb3B0aW9uey1ifSBvciBAb3B0 aW9uey0tYmFja3VwfSBvcHRpb24uCi1TZWUgYWxzbyB0aGUgQG9wdGlvbnstLXVwZGF0ZT1u b25lfSBvcHRpb24gd2hpY2ggd2lsbAotc2tpcCBleGlzdGluZyBmaWxlcyBidXQgbm90IGZh aWwuCitAc2V0IE1WX0NPTU1BTkQKK0Bub0Nsb2JiZXJPcHRpb257bXZ9CitAY2xlYXIgTVZf Q09NTUFORAogCiBAb3B0SXRlbXttdiwtLW5vLWNvcHksfQogQGNpbmRleCByZW5hbWluZyBm aWxlcyB3aXRob3V0IGNvcHlpbmcgdGhlbQpkaWZmIC0tZ2l0IGEvc3JjL212LmMgYi9zcmMv bXYuYwppbmRleCBjZDZhYWI0NzMuLjNiYTZmNzAxZSAxMDA2NDQKLS0tIGEvc3JjL212LmMK KysrIGIvc3JjL212LmMKQEAgLTI4OCw3ICsyODgsNyBAQCBSZW5hbWUgU09VUkNFIHRvIERF U1QsIG9yIG1vdmUgU09VUkNFKHMpIHRvIERJUkVDVE9SWS5cblwKICIpKTsKICAgICAgIG9w dXRzIChfKCJcCiAgIC1uLCAtLW5vLWNsb2JiZXJcblwKLSAgICAgICAgIGRvIG5vdCBvdmVy d3JpdGUgYW4gZXhpc3RpbmcgZmlsZVxuXAorICAgICAgICAgKGRlcHJlY2F0ZWQpIHNpbGVu dGx5IHNraXAgZXhpc3RpbmcgZmlsZXMuICBTZWUgYWxzbyAtLXVwZGF0ZVxuXAogIikpOwog ICAgICAgZnB1dHMgKF8oIlwKIElmIHlvdSBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgb2YgLWks IC1mLCAtbiwgb25seSB0aGUgZmluYWwgb25lIHRha2VzIGVmZmVjdC5cblwKLS0gCjIuNTUu MAoK --------------QjFFdvy4nHjKa70PJ5tQrMN3--