シンボリックリンクがbar
フォルダを指している場合、foo
次の2つのコマンドの動作は非常に異なります。
mv bar baz # rename link 'bar' to 'baz'
mv bar/ baz # rename folder 'foo' to 'baz'
(OSXでbash 3.2とzsh 5.7.1を試しました)
私は2番目の動作が非常に危険だと思います(特に「タブ」にフォルダ名の後にスラッシュが含まれることが多いことを考慮して)、可能であればこれを避けたいと思います。ドキュメントにはmv
このオプションがないようです。mv
私の関数のエイリアスが欠落しているので、この問題を解決するのに役立つBashオプションやzshオプションなどがありますか?
答え1
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