Передача файлов с помощью lftp в скрипте bash
У меня есть сервер a test-lx
, и сервер B test2-lx
, я хочу передать файлы с сервера A на сервер B.
При переносе файлов мне нужно будет создать driectory, только если он не существует, как я могу проверить, существует ли каталог во время lftp conenction? Как я могу получить несколько файлов в одной команде вместо того, чтобы делать это в 2 строках.
Есть ли возможность использовать 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
Ответы - Передача файлов с помощью lftp в скрипте bash / Transfer files using lftp in bash script

24.12.2014 01:29:49
Простой способ с 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

put
и cd
. Это команда, которую я использую для установления соединения: lftp -u myUser,myPass ftp://ta1bbn01:21 SwDrop\Repository
sleep 5 cd $desFolder sleep 5 put $srcFile bye

lftp -u drop-up,1Q2w3e4R ftp://ta1bbn01:21 << EOF cd $desFolder if [ ! -d /test ]; then mkdir test cd test put $srcFile else echo "The directory already exists - exiting" fi bye EOF


ls
возвращает строку, даже если каталог не существует. Вот строка, которую я получил: 550 /MSP-3.0.0.0: No such file or directory





13.07.2016 05:10:13
Я использовал ту же основную схему кодирования, что и phe, однако обнаружил, что использование ls /foldername выведет "папка не существует", если папка пуста. Чтобы решить эту проблему, я использую
#!/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

22.01.2020 01:16:02
Сначала подготовьте запись учетных данных в ~/.файл 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 для получения всех журналов из приложения Java spring boot, выполняющего экземпляр приложения linux в инфраструктуре azure.
Конечно, вы можете поместить туда свои команды, разделенные точкой с запятой.