如何识别和删除 Transmission 中的孤立 torrent 数据?

如何识别和删除 Transmission 中的孤立 torrent 数据?

我一直在使用 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 将其知道的所有内容移动到新目录。

相关内容