melhore meu script bash para localizar, remover e vincular symlink tree

0

Eu tenho esse script que tenho usado há algum tempo e funciona principalmente, mas há alguns problemas que eu gostaria de receber ajuda para corrigir.

O objetivo é observar um ponto de montagem externo, verificar a presença de diretórios de origem correspondentes e, se correspondente, remover a origem e criar um link simbólico do ponto externo para o local vazio onde estava a origem.

É claro que qualquer sugestão sobre melhores formas de alcançar a mesma tarefa seria muito bem-vinda.

O primeiro e mais significativo problema é que alguns diretórios são deixados para trás. Olhando através deles, não consigo ver nenhum padrão específico. Muitos têm {} ou outros caracteres especiais e acho que esta pode ser a causa principal, mas alguns são muito baunilha, sem caracteres especiais.

Segundo, meu script não leva em conta os arquivos, onde espera um diretório.

A estrutura é assim:

19823798/Test1 (789) - {456} [123]
8765862/Test2 {123} - (456) [789]
345345/Test2-ünicode (456) - {789} [123]
308/unexpected.file

e meu script é assim:

#!/bin/bash
set -e
src_dir="/var/tank"
dest_dir="/mnt/tank"
nums_and_names=$(find "$src_dir" -mindepth 2 -maxdepth 2 -type d -regextype grep -regex ".*/[0-9]\{1,10\}/.*" -printf '%P\n')
while read -r named; do
        echo "dest_dir is "${dest_dir}/$named""
        echo "find output is $named"
        [ -d "${dest_dir}/$named" ] && echo ""${dest_dir}/$named" exists!" || exit 0
        rm -rf -- "${src_dir}/$named"
        ln -s -- "${dest_dir}/$named" "${src_dir}/$named"
done <<< "$nums_and_names"
echo "all finished"
    
por jakethedog 16.11.2017 / 12:43

0 respostas