离线下载服务器获取文件到本地的功能实现

By: Sid Date: 2021/9/4

最近在自己的服务器上配置了bt离线下载,想要实现自动获取下载的文件到客户端的功能。过程中学到了很多,在此总结一下方便以后回顾。

项目地址atupload.sh · sid886/myShellScripts - 码云 - 开源中国 (gitee.com)

清单

实现该功能使用的工具:

这个过程中我学习到的知识

如何使用transmission-remote获取任务信息

显示的信息中,比较重要的有任务的大小、完成情况、任务的名称

<X>表示必须填写,如<username>就对应着sidpku,连<>一起替换掉。

[X]表示可选填写,可以不要。

代码中每行第一个>是命令提示符,不要输入到代码中。

怎样从脚本中隐藏密码

最简单的方法就是把密码放到别的地方。然后通过读取文件来获取。

我把密码和账号文件放在自己创建的$HOME/.mypasswd/文件夹下面,.<应用名称>.username储存账号,.<应用名称>.passwd储存密码。并且要修改权限使得只有自己能够读取。

当要使用账号和密码的时候,就通过读取文件来储存到变量中。

这是最简单的做法,还可以使用openssl来对密码加密,增加保存密码文件的安全性,提高数据传输过程中的安全性。具体可以参考:How to Use Encrypted Passwords in Bash Scripts

如何使用head, tail, gawk来处理日志文件

我的需求是从transmission-remote提供的任务列表中,获取下载完成度和任务名称,以进行后续的比较。

torrent.list

根据获取到的信息,我们需要去掉第一行和最后一行,然后获取最后一列数据(任务名),再进行分析。

第一条命令

参看:如何使用transmission-remote获取任务信息

第二条命令:head和tail去掉首末行

此命令使用了管道命令,cat获取到任务信息,首先用tail去掉首行,然后用head去掉末行,然后重定向到temp.txt文件中保存。在命令中,当任务列表经过tail处理后,head处理的输入就只包含任务列表的第二行到最后一行。然后head再将最后一行给去掉,输出只包含第二行到倒数第二行了。

使用tail获取除第一行外的所有内容

tail -n +<num>可以获取从第<num>行到最后一行的所有内容。

使用head获取除最后一行的所有内容

head -n -<num>可以获取去掉末尾<num>行的文本内容。

第三条命令:gawk处理列数据

[-F'<IFS>']可选选项,设定分隔符为<IFS>

此处-F' {2,}'是将分隔符设为2个及以上的 (空格)。{2,}是正则表达式的写法,重复2次或以上。还可以将分隔符设为:,如-F':'

 

'{print $10}'是将第10列的数据输出到标准输出流。

虽然torrent.list中Name是第9列,但每行开头是空格导致gawk把空格识别为了第一列,Name列变成了第10列。在实际运用中要注意这个问题。

 

更新中...