2016-11-08 34 views
0

Я пытаюсь выполнить echo $ file_name после завершения передачи. Однако я не могу найти ссылки на то, как создать переменную в LFTP, которая отображает имя файла того, что было просто загружено.Эхо текущая передача файла с помощью LFTP

Код:

#!/bin/bash 
login="myusername" 
pass="notmypassword" 
host="my.hosting.server" 
remote_dir='/Path/To/Remote/Dir/.' 
local_dir="/Path/To/Local/Dir/" 

file_name=**the name of the file im downloading** 
base_name="$(basename "$0")" 

lock_file="/tmp/$base_name.lock" 
trap "rm -f $lock_file" SIGINT SIGTERM 
if [ -e "$lock_file" ] 
then 
    echo "$base_name is running already." 
    exit 
else 
    touch "$lock_file" 
    lftp -u $login,$pass $host << EOF 
    set ftp:ssl-allow no 
    set mirror:use-pget-n 5 
    mirror -c -x "\.r(a|[0-9])(r|[0-9])$" -P5 --log="/var/log/$base_name.log" "$remote_dir" "$local_dir" 
    echo $file_name 
    quit 
EOF 
    #osascript -e 'display notification "$file_name Downloaded" with title "Media Server"' 
    rm -f "$lock_file" 
    trap - SIGINT SIGTERM 
    exit 
fi 

Я подумал, что было бы достаточно просто повторить текущий файл, а затем добавить эту переменную в мой osascript, чтобы вызвать уведомления о OSX, что файл был успешно переведен, но для жизни я не могу понять, как это сделать.

Что я делаю неправильно ???

Cheers!

+0

Можете ли вы уточнить, что вы подразумеваете под " эхо текущей передачи файлов ", что именно вы хотели бы отображать и где? – dood

+0

Уверенная вещь, я выполняю этот сценарий оболочки - как только файл успешно перенесен - я хочу, чтобы терминал эхо отождествлял имя переданного файла. Например, если бы я передавал: 'remote_dir = '/ path/to/remote/directory/AwesomeMovie.mp4'', он бы откликнул AwesomeMovie.mp4' – ThatsNoMoon

+0

Чтобы быть более упрощенным - я использую LFTP для загрузки файлов с моего сервера на мой домашний компьютер. После того, как передача LFTP завершена, мой сценарий echos «Movie Downloaded». Я хочу заменить слово «Movie» на переменную, которая является именем любого загруженного файла. Например, если я загрузил «Домашний фильм», сценарий echos «Home Movie Downloaded». Если я скачал «Friend's Movie», сценарий эхо «Скачать фильм друга». Имеет ли это смысл? – ThatsNoMoon

ответ

1

Этот сценарий будет эхо каждый файл, который был передан, не стесняйтесь, чтобы очистить его и изменить его в соответствии с вашими потребностями:

#!/bin/bash 

echo "Script started." 

download_directory="${HOME}/downloads/" 
echo "Downloading to ${download_directory}" 

rm ${download_directory}/* 

download_log=$(mktemp) 
lftp <<- EOF > ${download_log} 
    # elided connection details, enter your own 
    open 
    mirror -v . ${download_directory} 
    quit 
EOF 

cat ${download_log} | awk ' { print $3 } ' | sed 's/`//' | sed 's/'\''//' | xargs echo "Downloaded:" 
rm -f ${download_log} 
echo "Script successfully ended." 

Пример вывода:

=> ./foobar.sh 
Script started. 
Downloading to /home/downloads/ 
Downloaded: something1.yes testfile.txt 
Script successfully ended. 
+0

Да ты же мужчина! Спасибо!! – ThatsNoMoon

+0

Почему, черт возьми, вы бы 'rm $ {download_directory}/*' хотя ... эта строка выглядит так, как будто она не хороша ... – ThatsNoMoon

+0

@ThatsNoMoon Мне нужно было очистить каталог загрузок до того, как я скачал что-нибудь, не стесняйтесь удалять эту строку если это не то, что вы хотели бы сделать. – dood

0

Использование сценария проверки файла :

set xfer:verify on 
set xfer:verify-command /home/user/bin/file-transferred 

выходной скрипт (FD 1,2) перенаправляется, но вы можете использовать /dev/tty для вывода имени файла на терминал:

#!/bin/sh 
echo "$1" >/dev/tty 

В качестве альтернативы, открыть другой дескриптор:

lftp 3>&1 <<EOF 
... 
EOF 

и перенаправлять выход есть:

#!/bin/sh 
echo "$1" >&3