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'
mv
当我在已安装的外部驱动器的可写 NTFS 分区上运行时,就会出现问题。
当我将它复制到我的桌面文件夹(该文件夹位于 Ext4 分区上)并mv
在那里尝试时,它可以正常工作。
更新 2
$ sudo apt-show-versions coreutils
[sudo] password for rolf:
coreutils:amd64/sid 8.30-2 uptodate
coreutils:i386 not installed
事实上,我似乎正在运行一个有缺陷的版本(根据这个答案)。
答案1
/bin/mv
如果您正在运行 Debian sid(不稳定),那么版本8.30-2存在一个错误coreutils
。
此错误仅影响 Debian。[来源]
2019 年 2 月 27 日,一名 Debian 开发人员报告错误 #923420:
coreutils:当文件系统不支持 RENAME_NOREPLACE 时,mv 会损坏
此类破损在Debian 的最新滚动发布:
“西德”可能会发生大量更改和就地库更新。这可能会导致非常“不稳定”系统包含由于缺少库、无法满足依赖性等原因而无法安装的软件包。使用时请自行承担风险!
要解决此错误,您可以:
- 等待 Debian 修复此问题,或者
- 降级到 coreutils 版本 8.30-1,该版本不存在该错误。在撰写本文时,
coreutils=8.30-1
可以在 Debian buster (“测试”) 中找到。
下面是一个使用 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'
其他资源
答案2
我在 Windows(Windows 主机、Windows 客户机)上的 Docker 容器中看到同样的错误,使用 msys2 在客户机中安装主机目录。它有 GNU coreutils 8.32,所以可能不是同一个问题——是新问题吗?