web-dev-qa-db-fra.com

Transférer des fichiers en utilisant lftp dans le script bash

J'ai le serveur A test-lx et le serveur B test2-lx, je souhaite transférer des fichiers d'un serveur A à un serveur B . Lors du transfert des fichiers, je dois créer un répertoire uniquement s'il n'existe pas, comment puis-je vérifier si répertoire existe-t-il pendant la connexion de lftp? Comment puis-je sortir plusieurs fichiers dans une commande au lieu de le faire sur 2 lignes . Y at-il une option pour utiliser find -maxdepth 1 -name DirName

Voici mon code:

lftp -u drop-up,1Q2w3e4R   ftp://ta1bbn01:21 << EOF

cd $desFolder
mkdir test
cd test
put $srcFil
put $srcFile

bye 
EOF
5
user3502786

Manière simple avec ftp:

#!/bin/bash

ftp -inv ip << EOF
user username password

cd /home/xxx/xxx/what/you/want/
put what_you_want_to_upload

bye
EOF

Avec lftp:

#!/bin/bash

lftp -u username,password ip << EOF

cd /home/xxx/xxx/what/you/want/
put what_you_want_to_upload

bye
EOF

De lftp manual:

-u <user>[,<pass>]  use the user/password for authentication

Vous pouvez utiliser mkdir pour créer un répertoire. Et vous pouvez utiliser la commande put plusieurs fois comme ceci:

put what_you_want_to_upload
put what_you_want_to_upload2
put what_you_want_to_upload3

Et vous pouvez fermer la connexion avec bye


Vous pouvez vérifier que le dossier existe ou pas comme ceci:

#!/bin/bash
checkfolder=$(lftp -c "open -u user,pass ip; ls /home/test1/test1231")

if [ "$checkfolder" == "" ];
then
echo "folder does not exist"
else
echo "folder exist"
fi

De lftp manual:

-c <cmd>            execute the commands and exit

Et vous pouvez ouvrir une autre connexion pour mettre certains fichiers.


Je ne sais pas comment vérifier si le dossier existe ou non avec une seule connexion, mais je peux le faire comme ça. Peut-être que vous pouvez trouver une meilleure solution:

#!/bin/bash
checkfolder=$(lftp -c "open -u user,pass ip; ls /home/test1/test2")

if [ "$checkfolder" == "" ];
then

lftp -u user,pass ip << EOF

mkdir test2
cd test2
put testfile.txt
bye
EOF

else

echo "The directory already exists - exiting"

fi
14
phe

J’ai utilisé le même schéma de base que phe, mais j’ai constaté que l’utilisation de ls/foldername produirait le message "folder is not exist" si le dossier est vide. Pour résoudre cela, j'utilise

#!/bin/bash
checkfolder=$(lftp -c "open -u user,pass ip; ls | grep /test1231")

if [ "$checkfolder" == "" ];
then
echo "folder does not exist"
else
echo "folder exists"
fi

Veuillez noter que cela ne fonctionne que si le dossier est dans le répertoire racine. Pour les sous-répertoires d'un dossier, ce qui suit devrait fonctionner.

#!/bin/bash
checkfolder=$(lftp -c "open -u user,pass ip; find | grep home/test1/test1231")

if [ "$checkfolder" == "" ];
then
echo "folder does not exist"
else
echo "folder exists"
fi
1
edf242