在bash脚本中使用lftp传输文件

时间:2014-12-24 10:20:56

标签: linux bash unix centos

我有服务器A test-lx和服务器B test2-lx,我想将文件从服务器A传输到服务器B. 在传输文件的同时,只有在不存在时才需要创建一个driectory,如何在lftp连接期间检查目录是否存在?如何在一个命令中输出多个文件而不是在两行中执行此操作。 是否可以选择使用find -maxdepth 1 -name DirName

这是我的代码:

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

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

bye 
EOF

3 个答案:

答案 0 :(得分:15)

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

使用lftp:

#!/bin/bash

lftp -u username,password ip << EOF

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

bye
EOF

来自lftp手册:

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

您可以使用mkdir创建目录。你可以像这样使用put命令:

put what_you_want_to_upload
put what_you_want_to_upload2
put what_you_want_to_upload3

您可以关闭与bye

的关联

您可以检查文件夹是否存在:

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

来自lftp手册:

-c <cmd>            execute the commands and exit

你可以打开另一个连接放一些文件。


我不知道如何通过一个连接检查文件夹是否存在,但我可以这样做。也许你可以找到更好的解决方案:

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

答案 1 :(得分:1)

我使用了与phe相同的基本编码大纲但是我发现使用ls / foldername将输出&#34;文件夹不存在&#34;如果文件夹是空的。为了解决这个问题,我使用

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

请注意,仅当文件夹位于根目录中时才有效。对于文件夹中的子目录,以下内容应该有效。

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

答案 2 :(得分:0)

首先将凭据记录准备为〜/ .netrc文件,如下所示:

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

因此您不必在命令行中公开密码即可在脚本中使用此密码。

然后致电:

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

就我而言,我运行mget -c * lftp命令以从azure基础结构上运行linux应用程序实例的java spring boot应用程序获取所有日志。 当然,您可以在其中用分号分隔命令。