在我的 TrueNAS (FreeBSD 13.1) 服务器上,我有一个名为OldHDD
我想要重命名的目录,但出现错误:
% mv OldHDD oldhdd
mv: rename OldHDD to oldhdd/OldHDD: Invalid argument
我尝试了该命令的不同变体,但没有一个有效:
% mv ./OldHDD oldhdd
mv: rename ./OldHDD to oldhdd/OldHDD: Invalid argument
% mv -- OldHDD oldhdd
mv: rename OldHDD to oldhdd/OldHDD: Invalid argument
% mv /full/path/to//OldHDD /full/path/to/oldhdd
mv: rename /full/path/to/OldHDD to /full/path/to/oldhdd/OldHDD: Invalid argument
我也尝试过使用mmv
,即使它不报告错误,目录名称也不会改变:
% ls
total 1
drwxr-xr-x 3 user group 3B Apr 10 21:50 OldHDD
% mmv -rv OldHDD oldhdd
OldHDD -> oldhdd : done
% ls
total 1
drwxr-xr-x 3 user group 3B Apr 10 21:50 OldHDD
我认为目录内容可能有问题,但我可以重命名它包含的子目录就好。
我尝试复制目录以检查元数据是否会导致问题,但复制的目录仍然存在相同的问题。
我唯一一次成功重命名该目录是当我:(1)(错误地)OldHDD
仅创建了一个子目录的部分副本,以及(2)在OldHDD
.但由于原始目录的大小,我犹豫是否要创建原始目录的 tar 存档。
有人可以解释一下如何重命名这个目录以及这里发生了什么吗?
答案1
NAS 上的文件系统不区分大小写,因此OldHDD
和oldhdd
是相同的文件。但您的操作系统区分大小写,因此它会考虑这些不同的名称。该mv
命令询问文件系统目标是否oldhdd
是现有目录,答案是肯定的,因为这只是OldHDD
.因此mv
尝试将源移至此现有目录中。但源是同一个目录,因此这是使目录成为其自身子目录的尝试,文件系统拒绝这样做。
要以仅更改不区分大小写的文件系统上的大小写的方式重命名文件,请使用不区分大小写的中间名称重命名两次。
mv OldHDD oldhdd.temp_name
mv oldhdd.temp_name oldhdd
1但它保留大小写:它会记住其存储的名称的大小写。OldHDD
和oldhdd
是拼写相同文件名的不同方式,但文件系统会记住哪种拼写是所需的拼写。