高效查询传输以判断所有种子是否已完成

高效查询传输以判断所有种子是否已完成

我会尽力简短地描述,同时提供所有必需的信息。

我希望运行 Debian 上的 Transmission 的 NAS 前面的红色 LED 在下载 torrent 时闪烁红灯,然后在所有 torrent 完成后变为白色。

我正在尝试规划一个比原始脚本更高效的脚本:

#!/usr/bin/env bash

user=my_username
pass=my_password
dir=/Hitachi/Downloads/Temp/


trans="transmission-remote 0.0.0.0:9092 -n $user:$pass -l"


pid_file="/var/run/process.pid"


if [ -f $pid_file ]; then
  exit
else
  echo $$ > $pid_file
fi


flash_red () {

   echo 0 > /sys/class/leds/dart\:white\:power/brightness
while true
 do
   echo 1 > /sys/class/leds/dart\:red\:power/brightness
   sleep 0.5
   echo 0 > /sys/class/leds/dart\:red\:power/brightness
   sleep 0.5
done
}

flash_red &

while
 [ "$($trans | awk '! /awk/ && /n[/]a/ {print $2}')" == "n/a" ] \
 || [[ $($trans | awk '! /awk/ && /%/ {print substr($2, 1, length($2)-1)}' | sort -n | head -n 1) -lt 100 ]] \
 || find $dir -mindepth 1 -maxdepth 1 | read
do
 sleep 10
done

 kill $!
 echo 0 > /sys/class/leds/dart\:red\:power/brightness
 echo 1 > /sys/class/leds/dart\:white\:power/brightness
 rm $pid_file

exit

它效率很低,因为每 10 秒它必须探测“transmission-remote”两次,运行 awk 两次,并运行 sort、head 和 find 一次。

传输远程输出表格格式,需要进行排序才能获得所需的结果。

Transmission 确实具有一项功能,它会在 torrent 添加时运行一个脚本,并在 torrent 完成时运行不同的脚本。

有人能想到我可以利用此功能的方法(或任何其他方法,除了将 10 秒更改为其他时间)来降低闪存功能对系统的依赖吗?

答案1

它效率很低,因为每 10 秒它必须探测transmission-remote两次,运行awk两次,然后sort运行head一次find

每次运行transmission-remote一次,使用 oneawk来完全处理输出。如果我没有看错你的脚本,你不需要sortnor head,甚至不需要 的类似功能awk。相关代码可能如下:

query_transmission | awk 'NR!=1 && $1!="Sum:" && $2!="100%" {print "busy"; exit}'

其中query_transmission是 shell 函数(而不是$trans;参见我们如何运行存储在变量中的命令?busy)。当且仅当存在第二列中未报告的非第一行、非最后一行时,代码片段才会打印100%;否则输出将为空。query_transmission通过将第一个字段与 进行比较来检测输出的最后一行Sum:;这不太优雅,但是检测最后一行awk通常也不太优雅

你也不需要find。下面一行会告诉你文件$dir(我假设变量已设置并且不为空)中,仅使用 shell,即不使用外部工具:

(shopt -s dotglob nullglob; set -- "$dir"/*; echo "$#")

(一个子shell,所以shopt不会set影响主shell)。

因此我认为你后面的条件while可以简化为:

[ -n "$(query_transmission | awk 'NR!=1 && $1!="Sum:" && $2!="100%" {print "busy"; exit}')" ] \
|| (shopt -s dotglob nullglob; set -- "$dir"/*; [ "$#" -gt 0 ])

在你的脚本中你应该引用正确

相关内容