假设我有一个~/dot
包含一些文件和目录的文件夹,例如
zshrc
、Xresources
和emacs.d
。如何创建指向 中所有内容的符号链接~
,但符号链接以点 ( .zshrc
&c.) 开头?
我将如何删除由第一个问题的答案创建的所有现有符号链接? (即我如何卸载我的点文件。)
答案1
创建符号链接
cd ~/dot
for file in *; do
ln -sf dot/"$file" ~/."$file"
done
删除符号链接
cd
for dotfile in .*; do
test -L || continue
target="$(readlink "$dotfile")"
[[ $target =~ ^dot/ ]] && echo rm "$dotfile"
done
答案2
既然你提到zsh
:
autoload zmv # best in ~/.zshrc:
(cd && zmv -sL -v 'dot/(*)' '.$1')
要删除它们:
(cd && files=(dot/*(:t)) && rm -vf -- .$^files(N@))
(-v
如果您的rm
实现不支持,请删除 for verbose)
对于每个dot/foo
文件,.foo
如果它是符号链接(无论它是否指向dot/foo
),则会删除它。或者,你可以这样做:
rm .*(@e'<[[ $REPLY -ef dot/${REPLY#.} ]]>')
也就是说.foo
,如果它与old/foo
.