2016-11-08 16 views
0

転送が完了したら$ 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 

私は現在のファイルをエコーするためにかなり単純なこと、その後もファイルが正常に転送されたことをOSX上の通知をトリガするために私のosascriptをにこの変数を追加することを考え出し、しかし、私の人生のために、私はどのように考え出すことができません。

私は間違って何をしていますか?

乾杯!

+0

を、あなたが何を意味するか明確にしてくださいことができます」現在のファイル転送をエコーし​​ます。 "、正確に何を表示したいと思いますか? – dood

+0

確かに、私はこのシェルスクリプトを実行しています - 一度ファイルが正常に転送されたら - 転送されたファイルの名前を端末に返すようにします。例えば、私が 'remote_dir = '/ path/to/remote/directory/AwesomeMovie.mp4''を転送していたら、 'AwesomeMovie.mp4'をエコーし​​ます。 – ThatsNoMoon

+0

もっと単純化するために - 私はLFTPを使ってサーバからファイルをダウンロードします私の家のコンピュータ。 LFTPの転送が完了すると、私のスクリプトは "Movie Downloaded"にエコーします。私は「Movie」という単語を、ダウンロードされたファイルの名前である変数に置き換えたいと思います。たとえば、「Home Movie」をダウンロードした場合、スクリプトは「Home Movie Downloaded」にエコーします。私が "Friend's Movie"をダウンロードした場合、スクリプトは "Friend's Movie Downloaded"とエコーします。これは理にかなっていますか? – 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)はリダイレクトされますが、出力へ端末へファイル名:代わり

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

に、別の記述子開く:

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

をし、そこに出力をリダイレクト:

#!/bin/sh 
echo "$1" >&3 
関連する問題