Uso dei caratteri jolly nel comando scp


2

Ho uno script bash che copia diversi file su un server remoto usando scp. Questo script funziona bene ma ora ho bisogno di aggiungere un file che contiene un carattere jolly nel nome e ho un problema con esso.

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

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

Lo script copia i file con caratteri jolly (ad es. File.12345.ext o file3.4321.ext3) ma salva sul server remoto come file. * .Ext e file3. *. Ext3. Ho provato a usare una barra rovesciata nei nomi dei file, ma in questo caso lo script non copia affatto i file.

Come risolvere questo problema?

Grazie in anticipo.

Risposte:


3

Le matrici non sono presenti in / bin / sh, quindi utilizzate #!/bin/bash

scp per impostazione predefinita mostra l'avanzamento dei file trasferiti, quindi mi chiedo se è davvero necessario stampare ciascun nome file da soli.

I caratteri jolly non si espandono perché li aggiungi all'array tra virgolette e quindi citi l'espansione dell'array nel ciclo for, quindi anche i caratteri jolly non vengono espansi.

Lascia che i caratteri jolly si espandano quando li memorizzi nell'array e invii tutti i nomi file separatamente come argomenti scp:

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

Puoi semplificare ulteriormente omettendo del tutto l'array, nel qual caso puoi tornare a / bin / sh:

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

Grazie per l'aiuto. Tuttavia, per favore, lasciami essere in disaccordo con te :). Questo script funziona perfettamente con / bin / sh (Mac OS 10.9). La soluzione che mi hai fornito funziona. Copia i file con i caratteri jolly file.12345.ext e file3.4321.ext3 ma li salva nella directory principale (/ permanente / percorso /). Ma devo conservare i loro percorsi originali. Ecco perché ho usato / permanent / path / $ j nel mio script. Hai ragione sulle citazioni: questa era l'origine del problema. Li ho appena rimossi nella mia sceneggiatura e ha iniziato a funzionare come dovrebbe. Grazie mille per il vostro aiuto!
Ssey

Stai andando via #!/bin/shperché nelle ultime versioni di OS X, funziona shdavvero bashin modalità compatibilità. Ma solo perché puoi cavartela, non significa che sia una cosa ragionevole da fare.
Gordon Davisson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.