bash encontrar exec cp parents no script

0

Estou tentando executar este comando

for c in ax
do
mkdir $TgtDir$c/$Date
cd $TgtDir$c/$DirNew
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo $DIR
echo find . -iname $tgt -exec cp --parents {} ../$Date \;
find . -iname $tgt -exec cp --parents {} ../$Date \;
done

imprime

/home/ax/new
find . -iname '*20170829*' -exec cp --parents {} ../20170829 ;

mas não copia nada. Se eu executar o comando que é ecoado aqui (depois de adicionar o \ no final, parece que o echo está engolindo isso como um escape) do novo diretório, ele funciona bem - e os arquivos são copiados para / home / ax / 20170829 / ....

Alguma idéia do que estou sentindo falta aqui?

    
por chrise 29.08.2017 / 09:29

1 resposta

1

Eu acho que você não está realmente no diretório DIR; você executa cd em um subshell, mas o diretório de trabalho dos comandos restantes permanece em $TgtDir$c/$DirNew . Você pode verificar isso chamando pwd após echo $DIR .

Solução: chame cd diretamente, não use um subshell nem atribua o resultado a uma variável. Adicione o caminho de destino absoluto ao comando de cópia.

for c in ax
do
    mkdir $TgtDir$c/$Date

    DIR=$( dirname "${BASH_SOURCE[0]}" )
    cd "${DIR}"
    pwd

    find . -iname $tgt -exec cp --parents {} $TgtDir$c/$Date \;
done

Alternativa: use o diretório de origem em vez de "." no comando find.

for c in ax
do
    mkdir $TgtDir$c/$Date
    cd $TgtDir$c/$DirNew

    DIR=$( dirname "${BASH_SOURCE[0]}" )
    find "${DIR}" -iname $tgt -exec cp --parents {} ../$Date \;
done

Nota: o código não é testado.

    
por 29.08.2017 / 10:55