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


14

我在这里有一个小问题。

如果我有两个文件,说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

有人和我有同样的想法吗?还是我很奇怪?


2
我认为您期望的行为将非常危险。
starblue 2010年

@starblue:是的,我同意这很危险,但是我宁愿与某些危险而不是
前后

Answers:


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

您还可以添加一个别名,例如alias ren=mv -T
Mikel

0

如果您只想将一切从dira移到dirb,则可以运行mv dira/* dirb

按照我的HP-UX上的mv手册页。

The mv command moves:

+ One or more directory subtrees (directory1, [directory2, ...]) to a new or existing directory (dest-directory).


3
您的命令将丢失所有点文件。
qbi

谁仍然需要点文件;)
罗伯特·马赛奥利

1
而且,如果有问题,shopt -s dotglob使用bash可以解决。
David Z
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.