Directory
shell 命令中目錄名後的斜杠 (/)
我在這裡有一個小問題。
如果我有兩個文件,比如說
filea
andfileb
,mv filea fileb
會
- 刪除
fileb
- 重命名
filea
為fileb
然後,如果我有兩個目錄,比如說
dira
anddirb
,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
(indirb/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).