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
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
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