Localize o diretório e substitua por symlink

1

Estou tentando localizar e substituir vários diretórios por links simbólicos, mas não tenho ideia de como fazer isso.

Eu tenho duas pastas raiz, digamos, /var/www/html e /var/www/html2 e ambas contêm os mesmos arquivos e pastas, por exemplo

/var/www/html/project1/lib/config
/var/www/html2/project1/lib/config
/var/www/html/project2/v1/lib/config
/var/www/html2/project2/v1/lib/config
/var/www/html/project2/v2/lib/config
/var/www/html2/project2/v2/lib/config

O que eu quero fazer é pesquisar /var/www/html e substituir todas as pastas config por um link simbólico para a mesma pasta em /var/www/html2 , mas somente se config estiver dentro de uma pasta lib

Eu entendo que terei que remover o diretório existente ( rm -r /var/www/html/project1/lib/config ) e então criar o link simbólico ( ln -s /var/www/html2/project1/lib/config /var/www/html/project1/lib/config )

Eu posso fazer isso manualmente, mas gostaria de criar um 1 liner ou shell script para fazer isso.

Qualquer ajuda seria muito apreciada!

    
por nomayonnaise 13.10.2017 / 15:33

1 resposta

2

Usando a globalização recursiva do bash:

shopt -s globstar
cd /var/www/html
for d in **/lib/config
do
    echo rm -r "$d"
    echo ln -s /var/www/html2/"$d" "$d"
done

Execute com echo para verificar, execute sem realmente fazer a vinculação.

    
por muru 13.10.2017 / 15:42