Symlinking todos os arquivos-ponto e -diretórios

0

Digamos que eu tenha uma pasta ~/dot contendo alguns arquivos e diretórios, como zshrc , Xresources e emacs.d . Como faço para criar links simbólicos para todos aqueles em ~ , mas para que os links simbólicos comecem com um ponto ( .zshrc & c.)?

E como removerei todos os links simbólicos já existentes que teriam sido criados pela resposta à primeira pergunta? (Ou seja, como eu iria desinstalar meus dotfiles.)

    
por Toothrot 03.12.2017 / 23:10

2 respostas

2

criando os links simbólicos

cd ~/dot
for file in *; do
    ln -sf dot/"$file" ~/."$file"
done

excluindo os links simbólicos

cd
for dotfile in .*; do
    test -L || continue
    target="$(readlink "$dotfile")"
    [[ $target =~ ^dot/ ]] && echo rm "$dotfile"
done
    
por 03.12.2017 / 23:42
0

Como você está mencionando zsh :

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

Para removê-los:

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

(remova o -v para verbose se sua implementação rm não for compatível)

Para cada arquivo dot/foo , isso remove .foo se for um symlink (se aponta para dot/foo ou não). Alternativamente, você poderia fazer:

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

Isso é remover os links simbólicos .foo se for o mesmo arquivo (após a resolução do symlink) que old/foo .

    
por 05.12.2017 / 17:06