简体   繁体   中英

Transfer files using lftp in bash script

I have server A test-lx , and server B test2-lx , I want to transfer files from server A to server B. While transfering the files i'll need to create a driectory only if it's not exist, how can i check if a directory exist during the lftp conenction? How can i out several files in one command instead of doing this in 2 lines. Is there an option to use find -maxdepth 1 -name DirName

Here is my code:

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

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

bye 
EOF

Simple way with 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

With lftp:

#!/bin/bash

lftp -u username,password ip << EOF

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

bye
EOF

From lftp manual:

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

You can use mkdir for create a directory. And you can use put command several time like this:

put what_you_want_to_upload
put what_you_want_to_upload2
put what_you_want_to_upload3

And you can close connection with bye


You can check folder is exist or not like this:

#!/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

From lftp manual:

-c <cmd>            execute the commands and exit

And you can open another connection for put some files.


I don't know how to check folder is exist or not with one connection, but I can do that like this. Maybe you can find better 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

I used the same basic coding outline as phe however I found that using ls /foldername will output "folder does not exist" if the folder is empty. To solve this I use

#!/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

Please note this only works if the folder is in the root directory. For sub directories in a folder the following should work.

#!/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

First prepare credentials record into ~/.netrc file as:

machine site-url-here
login user-login-here
password user-password-here

so you don't have to expose your password on the command line to use this in script.

Then call:

lftp -e "lftp-command-here" ftps://user-login-here@site-url-here/initial-folder-here/`

In my case I run mget -c * lftp command for getting all logs from java spring boot application running linux app instance at azure infrastructure. Of course you can put your commands separated by semicolon there.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM