更新:正如 @ctrl-alt-delor 提到的,这是因为我所在的文件系统(fuseblk)是“保留大小写”但“忽略大小写”。
=====
我知道这不是一个大用例,但至少了解问题的根源,因为我经常这样做:
mv
和mkdir
/或进程中涉及的 shell 中的其他内容mkdir
区分大小写,并导致我出现错误:
x@host :/ $ ls
Dir
x@host :/ $ mv Dir/ dir
mv: cannot move 'Dir/' to a subdirectory of itself, 'dir/Dir'
x@host :/ $ mkdir dir
mkdir: cannot create directory ‘dir’: File exists
有没有一个简单的技巧可以让这个在一个命令中完成?
PS:我发现最快的方法是
mkdir tmp ; cd tmp ; mkdir dir ; mv ../Dir/* dir/ ; cd .. ; rm -r Dir ; mv tmp/dir . ; rm -r tmp
配置:Ubuntu 18.04
答案1
首先,您的主目录不应该使用胖文件系统;使用ext4。
这是我所知道的最简单、最快的方法(它的时间和内存复杂度为 O(1):无复制)
mv -T Dir dir-tmp-name; mv -T dir-tmp-name dir
如果您mv
不支持-T
,那么您可以不安全地忽略它。 Gnumv
确实支持它。