さまざまな急流をダウンロードするためにTransmissionを使用してきましたが、クライアントはファイルを削除せずに代わりに急流ファイルを削除することがあります。
これにより、削除された急流がダウンロードフォルダにいっぱいになりましたが、ファイルはそのまま残りました。
現在ロードされている急流にリンクされていないファイルを見つけて削除する最良の方法は何ですか?
答え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スクリプトの専門家から離れています。これは、多くの急流を含むかなり遅いスクリプトです。この方法で部分文字列を検索するのは遅いように見えるので、自由に代替案を提案してください。異常なファイル名が原因で問題が発生する可能性があります。
答え2
既知のファイルのリストをTransmission-remoteに要求できます。ファイルを要求する--files
には2つのオプションがあります--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
転送について知っているすべてを新しいディレクトリに移動するように要求することもできます。