誰かが同期するファイルとzsyncファイルの場所を取得して進行状況を表示するzsyncの簡単なzenityスクリプトを作成できますか?
zsyncには、解析のためのひどい出力があります。あなたはそれを試みるのに夢中になるでしょう。
そうは言っても、私はどうやら頭がおかしい。
#!/bin/bash
url=$1
seedfile=$2
tempdir=$(mktemp -d)
msgfile=$tempdir/message
trap 'rm -rf "$tempdir"' EXIT
down_filter() {
local message line percent speed
echo "Downloading zsync file" > "$msgfile"
read -r -n1 _
while read -r line; do
if [[ $line = [-#]* ]]; then
read -r _ percent speed <<< "$line"
echo "#$(<"$msgfile")\n$speed"
if (( ${percent%%.*} < 100 )); then
echo "$percent"
else
echo "99.9%"
fi
fi
done < <(awk 'BEGIN{RS="[\r\n]"} {print;fflush()}')
}
seed_filter() {
local message file count size point
while read -r -d '*' line; do
file=${line%:*}
message+="\n$file"
echo "$message" > "$msgfile"
file=${file#reading seed file }
count=1
size=$(( $(wc -c < "$file") / 1000000 + 1 ))
echo "#$message"
while read -r -n1 point; do
[[ $point = '*' ]] || break
((count++))
echo "$(( 100 * count / size ))%"
done
read -r message;
echo "$message" > "$msgfile"
done
}
if [[ -z $url ]]; then
url=$(zenity --entry \
--title=zsync \
--text="Enter URL to zsync file" \
--width=500 \
--height=100 \
) || exit
fi
if [[ -z $seedfile || ! -e $seedfile ]]; then
seedfile=$(zenity --file-selection \
--title="zsync $url" \
--text="Choose a seed-file" \
)
fi
{
zsync ${seedfile:+-i "$seedfile"} "$url" \
> >(down_filter >&3) 2> >(seed_filter >&3)
} 3> >(zenity --progress \
--title="zsync $url" \
--width=500 \
--height=100 \
)
スクリプトには多くの弱点があります。新しいバージョンでzsyncの出力にわずかな変更を加えると、破損する可能性があります。 (Ubuntu10.04のzsyncv0.6.1に対してのみテストされています)。いくつかの奇妙な理由で、進行状況の一部をstdoutに出力し、一部をstderrに出力するため、解析が非常に困難になります。
また、\
、*
、改行など、ファイル名の特定の奇数文字は処理されません。
バグが予想されます。あまりテストしていません。
とにかく、私はこれまでzsyncについて聞いたことがありませんでした。それはすてきなツールなので、少なくともそれについて私に知らせてくれてありがとう。 :)
スクリーンショット: