Usando curingas no comando scp

2

Eu tenho um script bash que copia vários arquivos para um servidor remoto usando scp. Esse script funciona bem, mas agora preciso adicionar um arquivo que contenha um caractere curinga no nome e tenho um problema com ele.

#!/bin/sh
files=('path1/subpath/file.*.ext' 'path2/subpath2/nowildcard.ext2' 'path3/subpath3/file3.*.ext3');

for j in "${files[@]}"; do
    echo "File 3[1;38;5;226m$j3[0m is copying."
    scp -P12345 $j "name@host:/permanent/path/$j";
done

O script copia os arquivos com curinga (por exemplo, file.12345.ext ou file3.4321.ext3), mas salva no servidor remoto como arquivo. * .ext e file3. *. ext3. Eu tentei usar uma barra invertida nos nomes dos arquivos, mas neste caso o script não copia os arquivos.

Como corrigir esse problema?

Obrigado antecipadamente.

    
por Ssey 01.03.2014 / 19:04

1 resposta

3

Matrizes não são um recurso encontrado em / bin / sh, então use #!/bin/bash

scp por padrão mostra um progresso dos arquivos transferidos, então eu questiono se você realmente precisa imprimir cada nome de arquivo sozinho.

Seus curingas não estão sendo expandidos porque você os adiciona à matriz com aspas e, em seguida, cita a expansão da matriz no loop for, portanto, os caracteres curinga não são expandidos.

Deixe os caracteres curinga se expandirem quando você os armazenar na matriz e envie todos os nomes de arquivos separadamente como argumentos scp:

#!/bin/bash
files=( 
    path1/subpath/file.*.ext 
    path2/subpath2/nowildcard.ext2 
    path3/subpath3/file3.*.ext3
)
scp -P12345 "${files[@]}" name@host:/permanent/path/

Você pode simplificar ainda mais, omitindo totalmente a matriz e, nesse caso, pode voltar a / bin / sh:

#!/bin/sh
scp -P12345                         \
    path1/subpath/file.*.ext        \
    path2/subpath2/nowildcard.ext2  \
    path3/subpath3/file3.*.ext3     \
    name@host:/permanent/path/
    
por 01.03.2014 / 19:51