shell 命令目录名后的斜杠 (/)

phu*_*ehe 14 directory slash filenames rename

我在这里有一个小问题。

如果我有两个文件,比如说fileafilebmv filea fileb

  • 删除 fileb
  • 重命名fileafileb

那么如果我有两个目录,比如说diradirbmv dira dirb

  • 移动diradirb(会成为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)