Alex Brodov
Alex Brodov

Reputation: 3515

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

Upvotes: 9

Views: 90915

Answers (3)

andrej
andrej

Reputation: 4743

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.

Upvotes: 0

edf242
edf242

Reputation: 11

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

Upvotes: 1

onur
onur

Reputation: 6365

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

Upvotes: 27

Related Questions