web-dev-qa-db-ja.com

mvでファイルの名前を変更する:「それ自体のサブディレクトリに移動できません」

これまで数え切れないほど機能していた通常のmvコマンドを使用してファイルの名前を変更しようとしています。

$ ls -l |grep "Picture 001"
-rwxrwxrwx 1 rolf rolf 657711 Feb 19 21:42 Picture 001_19.jpg
$ mv "Picture 001_19.jpg" "Picture 001_19_u.jpg"
mv: cannot move 'Picture 001_19.jpg' to a subdirectory of itself, 'Picture 001_19_u.jpg'

mvが突然このファイルの名前変更を拒否する理由を誰かに教えてもらえますか?
mvは、Picture 001_19_d.jpgがファイル名ではなく、ディレクトリ名であるとどのように判断しましたか?

引数-Tを指定して同じコマンドを実行してみました。 mvのマンページから:

-T, --no-target-directory
      treat DEST as a normal file

結果はまったく同じです。

これは混乱し、イライラします!

バグですか?

$ mv --version
mv (GNU coreutils) 8.30

更新

バグのようです

$ echo "blah" > tt
$ mv tt tt1
mv: cannot move 'tt' to a subdirectory of itself, '../tt'
$ mv tt ../
mv: cannot move 'tt' to a subdirectory of itself, '../tt'

この問題は、マウントされた外部ドライブの書き込み可能なNTFSパーティションでmvを実行すると発生します。

Ext4パーティションでホストされているデスクトップフォルダーにコピーし、そこでmvを試してみると、問題なく動作します。

アップデート2

$ Sudo apt-show-versions coreutils
[Sudo] password for rolf: 
coreutils:AMD64/sid 8.30-2 uptodate
coreutils:i386 not installed

確かに私はバグのあるバージョンを実行しているようです( この回答 による)。

1
Rolf

Debian sid(unstable)を実行している場合、coreutilsバージョン8.30-2の/bin/mvにバグがあります。

このバグはDebianにのみ影響します。[ ソース ]

2019年2月27日、Debian開発者は バグ#92342 を報告しました:

coreutils:ファイルシステムがRENAME_NOREPLACEをサポートしていない場合にmvが壊れます

このような破損は Debianの最先端のローリングリリース で予想されます:

"sid"は、大幅な変更とインプレースライブラリの更新の対象となります。これにより、非常に「不安定」システムになり、ライブラリがないためにインストールできないパッケージ、満たすことができない依存関係などが含まれる可能性があります。自己責任で使用してください。

このバグを回避するには、次のいずれかを実行できます。


これは、ZFSバックエンドを使用したLXDのバグを示すデモです。

deltik@node53 [~]$ lxc launch -s local images:debian/sid demo
Creating demo
Starting demo
root@demo:~# cat /etc/*-release
PRETTY_NAME="Debian GNU/Linux buster/sid"
NAME="Debian GNU/Linux"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@demo:~# apt-cache policy coreutils
coreutils:
  Installed: 8.30-2
  Candidate: 8.30-2
  Version table:
 *** 8.30-2 500
        500 http://deb.debian.org/debian sid/main AMD64 Packages
        100 /var/lib/dpkg/status
root@demo:~# df -hT
Filesystem                Type      Size  Used Avail Use% Mounted on
rpool/lxd/containers/demo zfs       379G  195M  378G   1% /
none                      tmpfs     492K     0  492K   0% /dev
udev                      devtmpfs  7.8G     0  7.8G   0% /dev/tty
tmpfs                     tmpfs     100K     0  100K   0% /dev/lxd
tmpfs                     tmpfs     100K     0  100K   0% /dev/.lxd-mounts
tmpfs                     tmpfs     7.8G     0  7.8G   0% /dev/shm
tmpfs                     tmpfs     7.8G  8.1M  7.8G   1% /run
tmpfs                     tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs                     tmpfs     7.8G     0  7.8G   0% /sys/fs/cgroup
root@demo:~# echo "blah" > tt
root@demo:~# mv tt tt1
mv: cannot move 'tt' to a subdirectory of itself, 'tt1'

追加リソース

1
Deltik