web-dev-qa-db-ja.com

すべてのドットファイルとディレクトリをシンボリックリンクする

zshrcXresources~/dotなどのファイルとディレクトリを含むフォルダemacs.dがあるとします。 ~内のすべてのシンボリックリンクを作成するにはどうすればよいですか。ただし、シンボリックリンクはドット(.zshrc&c。)で始まりますか?

そして、最初の質問への回答によって作成されたであろう既存のシンボリックリンクをすべて削除するにはどうすればよいですか? (つまり、ドットファイルをどのようにアンインストールしますか?)

1
Toothrot

シンボリックリンクの作成

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
3
Hauke Laging

zshについて言及しているので:

autoload zmv # best in ~/.zshrc:
(cd && zmv -sL -v 'dot/(*)' '.$1')

それらを削除するには:

(cd && files=(dot/*(:t)) && rm -vf -- .$^files(N@))

rm実装でサポートされていない場合は、冗長にするために-vを削除してください)

dot/fooファイルごとに、シンボリックリンクの場合(.fooを指しているかどうかに関係なく)dot/fooが削除されます。または、次のようにすることもできます。

rm .*(@e'<[[ $REPLY -ef dot/${REPLY#.} ]]>')

つまり、.fooと同じファイル(シンボリックリンク解決後)の場合は、old/fooシンボリックリンクを削除します。

0