Directory

shell 命令中目錄名後的斜杠 (/)

  • August 22, 2021

我在這裡有一個小問題。

如果我有兩個文件,比如說fileaand filebmv filea fileb

  • 刪除fileb
  • 重命名fileafileb

然後,如果我有兩個目錄,比如說diraand dirbmv 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(in dirb/dira)

有沒有人和我一樣的想法?還是我只是奇怪?

是的,這有點不一致,即使在 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

如果您只想將所有內容從 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).

引用自:https://unix.stackexchange.com/questions/870