скрипт zenity для zsync

Может ли кто-нибудь сделать простой скрипт zenity для zsync, который просто берет местоположение файла для синхронизации и файл zsync и показывает прогресс?

2
задан 22 June 2011 в 21:08

9 ответов

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 в более новой версии, скорее всего, сломает его. (Проверяется только на zsync Ubuntu 10.04 v0.6.1). По какой-то нечетной причине он выводит часть прогресса на stdout, а некоторые - на stderr, что делает его сложным для синтаксического анализа.

Кроме того, он не будет обрабатывать определенные нечетные символы в именах файлов, например \ , * или строки новой строки.

Ожидать ошибок; Я действительно не проверял это.

В любом случае, я никогда не слышал о zsync раньше. Это аккуратный инструмент, поэтому спасибо, что сообщили мне об этом. :)

Скриншоты:

5
ответ дан 25 May 2018 в 23:12
  • 1
    Он работал в 10.04 с версией zsync 0.6.1-1ubuntu1. благодаря – Alaukik 3 February 2011 в 13:34

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 в более новой версии, скорее всего, сломает его. (Проверяется только на zsync Ubuntu 10.04 v0.6.1). По какой-то нечетной причине он выводит часть прогресса на stdout, а некоторые - на stderr, что делает его сложным для синтаксического анализа.

Кроме того, он не будет обрабатывать определенные нечетные символы в именах файлов, например \ , * или строки новой строки.

Ожидать ошибок; Я действительно не проверял это.

В любом случае, я никогда не слышал о zsync раньше. Это аккуратный инструмент, поэтому спасибо, что сообщили мне об этом. :)

Скриншоты:

5
ответ дан 25 July 2018 в 22:33

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 в более новой версии, скорее всего, сломает его. (Проверяется только на zsync Ubuntu 10.04 v0.6.1). По какой-то нечетной причине он выводит часть прогресса на stdout, а некоторые - на stderr, что делает его сложным для синтаксического анализа.

Кроме того, он не будет обрабатывать определенные нечетные символы в именах файлов, например \ , * или строки новой строки.

Ожидать ошибок; Я действительно не проверял это.

В любом случае, я никогда не слышал о zsync раньше. Это аккуратный инструмент, поэтому спасибо, что сообщили мне об этом. :)

Скриншоты:

5
ответ дан 26 July 2018 в 22:27

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 в более новой версии, скорее всего, сломает его. (Проверяется только на zsync Ubuntu 10.04 v0.6.1). По какой-то нечетной причине он выводит часть прогресса на stdout, а некоторые - на stderr, что делает его сложным для синтаксического анализа.

Кроме того, он не будет обрабатывать определенные нечетные символы в именах файлов, например \ , * или строки новой строки.

Ожидать ошибок; Я действительно не проверял это.

В любом случае, я никогда не слышал о zsync раньше. Это аккуратный инструмент, поэтому спасибо, что сообщили мне об этом. :)

Скриншоты:

5
ответ дан 2 August 2018 в 03:59

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 в более новой версии, скорее всего, сломает его. (Проверяется только на zsync Ubuntu 10.04 v0.6.1). По какой-то нечетной причине он выводит часть прогресса на stdout, а некоторые - на stderr, что делает его сложным для синтаксического анализа.

Кроме того, он не будет обрабатывать определенные нечетные символы в именах файлов, например \ , * или строки новой строки.

Ожидать ошибок; Я действительно не проверял это.

В любом случае, я никогда не слышал о zsync раньше. Это аккуратный инструмент, поэтому спасибо, что сообщили мне об этом. :)

Скриншоты:

5
ответ дан 4 August 2018 в 20:02

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 в более новой версии, скорее всего, сломает его. (Проверяется только на zsync Ubuntu 10.04 v0.6.1). По какой-то нечетной причине он выводит часть прогресса на stdout, а некоторые - на stderr, что делает его сложным для синтаксического анализа.

Кроме того, он не будет обрабатывать определенные нечетные символы в именах файлов, например \ , * или строки новой строки.

Ожидать ошибок; Я действительно не проверял это.

В любом случае, я никогда не слышал о zsync раньше. Это аккуратный инструмент, поэтому спасибо, что сообщили мне об этом. :)

Скриншоты:

5
ответ дан 6 August 2018 в 04:03

zsync имеет ужасный выход для синтаксического анализа.

Это говорит о том, что я, по-видимому, сумасшедший.

  #! / Bin / bash url = $ 1 seedfile = $ 2 tempdir = $  (mktemp -d) msgfile = $ tempdir / message trap 'rm -rf "$ tempdir"' EXIT down_filter () {локальная строка сообщения процентная скорость echo "Загрузка zsync-файла" & gt;  «$ msgfile» читать -r -n1 _ во время чтения строки -r;  do, если [[$ line = [- #] *]];  затем прочитайте -r _ percent speed & lt; & lt;  "$ line" echo "# $ (& lt;" $ msgfile ") \n $ speed" if (($ {percent %%. *} & lt; 100));  затем echo «$ percent» else echo «99.9%» fi fi done & lt;  & lt; (awk 'BEGIN {RS = "[\r \n]"} {print; fflush ()}')} seed_filter () {локальная точка количества файлов сообщений при чтении -r -d '*' line;  do file = $ {line%: *} message + = "\n $ file" echo "$ message" & gt;  «$ msgfile» file = $ {file # read seed file} count = 1 size = $ (($ (wc -c & lt; "$ file") / 1000000 + 1)) echo "# $ message" при чтении -r  -n1 точка;  do [[$ point = '*']] ||  break ((count ++)) echo "$ ((100 * count / size))%" done read -r message;  echo "$ message" & gt;  "$ msgfile" done}, если [[-z $ url]];  затем url = $ (zenity -entry \ --title = zsync \ --text = "Введите URL-адрес в файл zsync" \ --width = 500 \ --height = 100 \) ||  exit fi if [[-z $ seedfile ||  !  -e $ seedfile]];  затем seedfile = $ (zenity -file-selection \ --title = "zsync $ url" \ --text = "Выбрать файл-семестр" \) fi {zsync $ {seedfile: + -i "$ seedfile"}  "$ url" \ & gt;  & gt; (down_filter & gt; & amp; 3) 2 & gt;  & gt; (seed_filter & gt; & amp; 3)} 3 & gt;  & gt; (zenity --progress \ --title = "zsync $ url" \ --width = 500 \ --height = 100 \)  

В сценарии будет много недостатков , Любое небольшое изменение в выходе zsync в более новой версии, скорее всего, сломает его. (Проверяется только на zsync Ubuntu 10.04 v0.6.1). По какой-то нечетной причине он выводит часть прогресса на stdout, а некоторые - на stderr, что делает его сложным для синтаксического анализа.

Кроме того, он не будет обрабатывать определенные нечетные символы в именах файлов, например \ , * или новые строки.

Ожидайте ошибок; Я вообще не тестировал это.

В любом случае, я никогда раньше не слышал о zsync. Это аккуратный инструмент, поэтому спасибо, что сообщили мне об этом. :)

Скриншоты: enter image description here [!d3] enter image description here [!d4]

5
ответ дан 7 August 2018 в 22:03

zsync имеет ужасный выход для синтаксического анализа.

Это говорит о том, что я, по-видимому, сумасшедший.

  #! / Bin / bash url = $ 1 seedfile = $ 2 tempdir = $  (mktemp -d) msgfile = $ tempdir / message trap 'rm -rf "$ tempdir"' EXIT down_filter () {локальная строка сообщения процентная скорость echo "Загрузка zsync-файла" & gt;  «$ msgfile» читать -r -n1 _ во время чтения строки -r;  do, если [[$ line = [- #] *]];  затем прочитайте -r _ percent speed & lt; & lt;  "$ line" echo "# $ (& lt;" $ msgfile ") \n $ speed" if (($ {percent %%. *} & lt; 100));  затем echo «$ percent» else echo «99.9%» fi fi done & lt;  & lt; (awk 'BEGIN {RS = "[\r \n]"} {print; fflush ()}')} seed_filter () {локальная точка количества файлов сообщений при чтении -r -d '*' line;  do file = $ {line%: *} message + = "\n $ file" echo "$ message" & gt;  «$ msgfile» file = $ {file # read seed file} count = 1 size = $ (($ (wc -c & lt; "$ file") / 1000000 + 1)) echo "# $ message" при чтении -r  -n1 точка;  do [[$ point = '*']] ||  break ((count ++)) echo "$ ((100 * count / size))%" done read -r message;  echo "$ message" & gt;  "$ msgfile" done}, если [[-z $ url]];  затем url = $ (zenity -entry \ --title = zsync \ --text = "Введите URL-адрес в файл zsync" \ --width = 500 \ --height = 100 \) ||  exit fi if [[-z $ seedfile ||  !  -e $ seedfile]];  затем seedfile = $ (zenity -file-selection \ --title = "zsync $ url" \ --text = "Выбрать файл-семестр" \) fi {zsync $ {seedfile: + -i "$ seedfile"}  "$ url" \ & gt;  & gt; (down_filter & gt; & amp; 3) 2 & gt;  & gt; (seed_filter & gt; & amp; 3)} 3 & gt;  & gt; (zenity --progress \ --title = "zsync $ url" \ --width = 500 \ --height = 100 \)  

В сценарии будет много недостатков , Любое небольшое изменение в выходе zsync в более новой версии, скорее всего, сломает его. (Проверяется только на zsync Ubuntu 10.04 v0.6.1). По какой-то нечетной причине он выводит часть прогресса на stdout, а некоторые - на stderr, что делает его сложным для синтаксического анализа.

Кроме того, он не будет обрабатывать определенные нечетные символы в именах файлов, например \ , * или новые строки.

Ожидайте ошибок; Я вообще не тестировал это.

В любом случае, я никогда раньше не слышал о zsync. Это аккуратный инструмент, поэтому спасибо, что сообщили мне об этом. :)

Скриншоты: enter image description here [!d3] enter image description here [!d4]

5
ответ дан 10 August 2018 в 10:17

zsync имеет ужасный выход для синтаксического анализа.

Это говорит о том, что я, по-видимому, сумасшедший.

  #! / Bin / bash url = $ 1 seedfile = $ 2 tempdir = $  (mktemp -d) msgfile = $ tempdir / message trap 'rm -rf "$ tempdir"' EXIT down_filter () {локальная строка сообщения процентная скорость echo "Загрузка zsync-файла" & gt;  «$ msgfile» читать -r -n1 _ во время чтения строки -r;  do, если [[$ line = [- #] *]];  затем прочитайте -r _ percent speed & lt; & lt;  "$ line" echo "# $ (& lt;" $ msgfile ") \n $ speed" if (($ {percent %%. *} & lt; 100));  затем echo «$ percent» else echo «99.9%» fi fi done & lt;  & lt; (awk 'BEGIN {RS = "[\r \n]"} {print; fflush ()}')} seed_filter () {локальная точка количества файлов сообщений при чтении -r -d '*' line;  do file = $ {line%: *} message + = "\n $ file" echo "$ message" & gt;  «$ msgfile» file = $ {file # read seed file} count = 1 size = $ (($ (wc -c & lt; "$ file") / 1000000 + 1)) echo "# $ message" при чтении -r  -n1 точка;  do [[$ point = '*']] ||  break ((count ++)) echo "$ ((100 * count / size))%" done read -r message;  echo "$ message" & gt;  "$ msgfile" done}, если [[-z $ url]];  затем url = $ (zenity -entry \ --title = zsync \ --text = "Введите URL-адрес в файл zsync" \ --width = 500 \ --height = 100 \) ||  exit fi if [[-z $ seedfile ||  !  -e $ seedfile]];  затем seedfile = $ (zenity -file-selection \ --title = "zsync $ url" \ --text = "Выбрать файл-семестр" \) fi {zsync $ {seedfile: + -i "$ seedfile"}  "$ url" \ & gt;  & gt; (down_filter & gt; & amp; 3) 2 & gt;  & gt; (seed_filter & gt; & amp; 3)} 3 & gt;  & gt; (zenity --progress \ --title = "zsync $ url" \ --width = 500 \ --height = 100 \)  

В сценарии будет много недостатков , Любое небольшое изменение в выходе zsync в более новой версии, скорее всего, сломает его. (Проверяется только на zsync Ubuntu 10.04 v0.6.1). По какой-то нечетной причине он выводит часть прогресса на stdout, а некоторые - на stderr, что делает его сложным для синтаксического анализа.

Кроме того, он не будет обрабатывать определенные нечетные символы в именах файлов, например \ , * или новые строки.

Ожидайте ошибок; Я вообще не тестировал это.

В любом случае, я никогда раньше не слышал о zsync. Это аккуратный инструмент, поэтому спасибо, что сообщили мне об этом. :)

Скриншоты: enter image description here [!d3] enter image description here [!d4]

5
ответ дан 13 August 2018 в 16:41
  • 1
    Он работал в 10.04 с версией zsync 0.6.1-1ubuntu1. благодаря – Lincity 3 February 2011 в 13:34

Другие вопросы по тегам:

Похожие вопросы: