Передача файлов с помощью lftp в скрипте bash

Передача файлов с помощью lftp в скрипте bash

24.12.2014 01:20:55 Просмотров 45 Источник

У меня есть сервер 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

Является ответом!
phe

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
https://stackoverflow.com/questions/27635292/transfer-files-using-lftp-in-bash-script/27635444#comment43691801_27635444
Если я запускаю это через терминал, он работает, но в скрипте bash он не работает, он устанавливает соединение, но не выполняет команду putи cd. Это команда, которую я использую для установления соединения: lftp -u myUser,myPass ftp://ta1bbn01:21 SwDrop\Repositorysleep 5 cd $desFolder sleep 5 put $srcFile bye
https://stackoverflow.com/questions/27635292/transfer-files-using-lftp-in-bash-script/27635444#comment43692266_27635444
На самом деле это сработало сейчас, вы знаете, как я могу использовать условия в открытом соединении ? Я хочу проверить, существует ли папка, которую я хочу создать. Вот что я писал : 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
https://stackoverflow.com/questions/27635292/transfer-files-using-lftp-in-bash-script/27635444#comment43693654_27635444
Вы не можете использовать if, потому что это не команда ftp. Вы можете использовать только команды ftp после открытия ftp-соединения. Вы можете проверить, существует папка или нет с другим соединением. Вы можете объяснить, что вы хотите, пожалуйста, отредактируйте свой вопрос.
https://stackoverflow.com/questions/27635292/transfer-files-using-lftp-in-bash-script/27635444#comment43694853_27635444
Команда lsвозвращает строку, даже если каталог не существует. Вот строка, которую я получил: 550 /MSP-3.0.0.0: No such file or directory
https://stackoverflow.com/questions/27635292/transfer-files-using-lftp-in-bash-script/27635444#comment43695014_27635444
Так что вы можете проверить, если вернуть это или нет.
https://stackoverflow.com/questions/27635292/transfer-files-using-lftp-in-bash-script/27635444#comment43695237_27635444
Я сделаю это, но это не так эффективно, спасибо в любом случае.
https://stackoverflow.com/questions/27635292/transfer-files-using-lftp-in-bash-script/27635444#comment43695360_27635444
Я нашел способ заставить команду find " работать. find -d 1 DirToSearch
https://stackoverflow.com/questions/27635292/transfer-files-using-lftp-in-bash-script/27635444#comment75095499_27635444
Когда вы находитесь в командах lftp, "cd" относится к удаленному dir, а не к локальному dir. Вы должны использовать "!cd " для местного реж.
edf242

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
andrej

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. Конечно, вы можете поместить туда свои команды, разделенные точкой с запятой.

Закрыть X