phu*_*ehe 14 directory slash filenames rename
我在这里有一个小问题。
如果我有两个文件,比如说filea
和fileb
,mv filea fileb
会
fileb
filea
为fileb
那么如果我有两个目录,比如说dira
和dirb
,mv dira dirb
会
dira
到dirb
(会成为dirb/dira
)注意到在这两种情况下都没有通知或消息,这对我来说非常不一致。我认为mv dira dirb
应该只是简单地覆盖dirb
与内容dira
(或指定目录下的合并两个目录dirb
)。
我记得在某处读到过,带斜杠的目录名(如dira/
)被视为目录,而没有斜杠的名称(如dira
)被视为文件(当然,在某种程度上)。无论如何,现在我想让 shell(zsh 和可能的 bash)通过使用斜杠来尊重我的目录符号。是否有一个终端选项可以让我强制执行?
澄清一下,这是我想要的行为:
mv dira dirb
结果dirb
被内容覆盖dira
mv dira dirb/
结果dira
被移入dirb
(在dirb/dira
)有没有人和我一样的想法?还是我只是奇怪?
小智 11
是的,这有点不一致,即使在 GNU 工具中也是如此。
您提议的一个问题是不能删除非空目录。除此之外,-T
(无论如何,在 GNU 土地上)近似于您想要的(第一种情况):
$ ls dira/ dirb/
dira/:
a
dirb/:
b
$ mv -iT dira/ dirb/
mv: overwrite `dirb/'? y
mv: cannot move `dira/' to `dirb/': Directory not empty
$ rm dirb/b
$ mv -iT dira/ dirb/
mv: overwrite `dirb/'? y
$ ls dira/ dirb/
ls: cannot access dira/: No such file or directory
dirb/:
a
Run Code Online (Sandbox Code Playgroud)