2016-11-24 3 views
0

Je veux mettre un répertoire entier qui contient des fichiers pdf sur un autre serveur avec un smbclientscript. Mon script:Script smbclient mettant plusieurs fichiers avec la variable

#Set variable for reports 
variable=`ls | grep pdf` 

smbclient -U "server\user"%pw //some/direc/tory/bla/bla << Commands 
cd to/another/dir 
put $variable 
exit 
Commands 

Il fonctionne, mais le problème vient du fait qu'il ne peut copier le premier fichier est listet bei ls | grep pdf. Pour les autres fichiers, le shell répond avec le fichier: commande non trouvée.

Répondre

0

Dans bash

variable=`ls |grep pdf` 

obtiendrez une variable de chaîne avec STDOUT, pas un tableau. Ce n'est pas ce que tu veux.

Peut-être xargs va vous aider. Vous pouvez faire comme suit, mais pas une solution élégante, je pense.

ls | grep '.pdf$' |xargs -I{} smbclient -U "server\user"%pw //some/direc/tory/bla/bla -D 'to/another/dir' -c "{}" 
+0

Ne fonctionne pas :( –

+0

Désolé pour ma faute de frappe. Il est '-I' pas -i. Je sais comment utiliser' subclient', mais 'xargs' devrait résoudre votre problème, et c'est un excellent outil, vous pouvez voir comment cela fonctionne en utilisant 'man xargs' dans * UNIX Vous pouvez aussi essayer cette commande 'ls | grep' .pdf $ '| xargs -I {} smbclient -U" serveur \ utilisateur "% pw // certains/direc/tory/bla/bla -D 'to/autre/dir'' -c "{}" – catssay

0

Je me suis moi-même être la solution:

cd /directory/with/files/to/copy 
#Set Variable 
reports=$(ls *) 
for i in $reports ; do 

    smbclient -U "srv\User"%pws //some/dir/bla/bla/bla << Commands 
    cd another/dir/etc 
    put $i 
    exit 
    Commands 
    done 

Merci!

+0

Cela causera un problème quand l'un de vos noms de fichier contient des espaces, par exemple, ce fichier 'c'est un test.pdf' conduira à 4 fichiers 'this'' est' 'a'' test.pdf', parce que quand bash se développe, il utilisera la valeur de la variable 'IFS' comme séparateur, la valeur par défaut de' IFS' est , cela causera un problème lorsque le nom de fichier contient de l'espace Pour résoudre ce problème, vous pouvez utiliser 'IFS = $ (echo -e '\ t')' pour définir IFS avec . et dans le bloc 'for', assurez-vous que sround' $ i' avec double citation. – catssay