我一直在使用 Transmission 下载各种 torrent,但有时客户端不会删除文件,而是删除 torrent 文件。
这使得我的下载文件夹充满了已删除的种子,但文件仍然存在。
查找哪些文件当前未链接到任何加载的 torrent 并将其删除的最佳方法是什么?
答案1
使用 derobert 的答案,我编写了一个 bash 脚本来删除未列出的所有文件transmission-remote
#!/bin/bash
# get a list of all torrents transmission-remote 2.52
transmission-remote 127.0.0.1 -t all --files > _all_torrents.tmp
# all items in this directory
for i in *
do
# is it a file or a directory
if test -f "$i" -o -d "$i"
then
# does it NOT exist in the list of all torrent files
#if [[ $all_files != *"$i"* ]]
if ! grep -Fq "$i" _all_torrents.tmp
then
# does it not start with an underscore (my special char for files in directory not related to transmission
if [[ "$i" != _* ]]
then
# delete them
echo rm -rf \"$i\"
# rm -rf "$i"
fi
fi
fi
done
# clear tmp file
rm _all_torrents.tmp
请注意,实际删除文件的行已被注释掉。我建议在执行之前先运行该脚本以查看将删除哪些内容。如果您将其保留在下载文件夹中,它还会删除“传输”中未列出的任何文件,例如“不完整”目录。
我远不是 bash 脚本专家,这是一个相当慢的脚本,有大量的 torrent,因为用这种方法搜索子字符串似乎很慢,请随意建议替代方案。我怀疑它也可能因不寻常的文件名而中断。
答案2
您可以向 Transmission-remote 询问它所知道的文件列表。有两种索要文件的选项,--files
以及--info-files/-if
;您需要的可能取决于您正在运行的版本:
$ transmission-remote «host» -N ~/.transmission-netrc -t all --files # or -if
musopen-lossless-dvd (4 files):
# Done Priority Get Size Name
0: 100% Normal Yes 8.07 GB musopen-lossless-dvd/Musopen-Lossless-DVD.zip
⋮
不幸的是,它的目的是显示,而不是解析,并且似乎没有选项可以进行脚本友好的输出。如果您是一名程序员,您可以获取源代码并修复该问题,或者在 Perl/Python/Ruby/JavaScript/等中编写您自己的实现。获取文件名。传输采用有记录的、相当简单的 JSON-over HTTP 协议。
您还可以尝试--move
要求 Transmission 将其知道的所有内容移动到新目录。