Directory
防止 mv 移動目標文件夾
如果符號連結
bar
指向文件夾foo
,則以下兩個命令具有非常不同的行為:mv bar baz # rename link 'bar' to 'baz' mv bar/ baz # rename folder 'foo' to 'baz'
(在 OSX 上嘗試使用 bash 3.2 和 zsh 5.7.1)。
我發現第二種行為非常危險(特別是考慮到“製表符”通常用尾部斜杠完成文件夾名稱),並且希望盡可能防止它。的手冊
mv
似乎沒有這個選項。缺少我自己的函式的別名mv
,是否可能有 Bash 選項或 zsh 選項或其他有助於解決此問題的選項?
在 zsh 中,只要您不這樣做
unsetopt auto_remove_slash
,zsh 就會在完成結束時刪除尾部斜杠。它在完成過程中添加了一個斜杠,因此ba``Tab
結果為bar/
,但如果您按下Space
(或移動游標或除插入內容之外的大多數其他內容),zsh 將刪除/
. (/
突出顯示它表示它“處於忍受狀態”。)如果您最終輸入帶有斜杠的命令
mv bar/ baz
,則重命名目錄foo
是預期的行為。由於bar/
以斜杠結尾,路徑名解析將其轉換為foo
.如果你想避免這種行為,你必須為
mv
. 未經測試,對於 zsh:function mv { local i for ((i=1; i < $#; i++)); do if [[ $argv[$i] == *[^/]*/ ]]; then argv[$i]=${argv[i]%/} fi done command mv "$@" }
請注意,此函式相當幼稚,例如,它不理解
-t
/--target
將目標作為不應剝離其尾部斜杠的參數。