2012-02-10 13 views
3

transmission-remoteの出力に基づいて.torrentファイルを自動的に削除するスクリプトを設定しようとしています。ここで拡張子を引数に連結するxargs

transmission-remote http://localhost/transmission -l | grep 100% | grep Finished | awk '{print $10}' | xargs -I% -r -p -n 1 /bin/rm /mnt/samba/Dropbox/%.torrent 

が私の現在の出力です:

/bin/rm /mnt/samba/Dropbox/MyTorrent.torrent ?...y 

/bin/rm: cannot remove `/mnt/samba/Dropbox/MyTorrent.torrent': No such file or directory 

出力された名前が.torrent名前と同じです

[email protected]:/mnt/samba/Dropbox/# ls 
MyTorrent.torrent 
[email protected]:/mnt/samba/Dropbox/# 

ここではawk

前のように見えるものもあります
[email protected]:~# transmission-remote http://localhost/transmission -l | grep 100% | grep Finished | grep Done 
    12 100% 174.4 MiB Done   0.0  0.0 0.01 Finished  MyTorrent 

私は実際のトレント名をあいまいにしていますが、誰にも何か提案はありますか? .torrent拡張子をxargsに正しく連結していますか?

+1

は急流名が空白文字が含まれていますか? – jcollado

+0

私は以前に応答していないため申し訳ありません(私は完全に投稿応答の電子メール通知を設定したと思います)とにかく、いいえ空白がありません。私は今週末にこれらの答えを試してみるつもりです。みなさんありがとうございました – yougotborked

答えて

3

さてあなたは(その部分だけ)awkがあなたのためにそれを行うことができ、そのためxargsを必要としません:awk

awk '{print $10 ".torrent"}' 

さらに良いことには、それにrmを呼び出すことができます。

awk '{system("rm -i " $10 ".torrent")}' 

の場合トレント名にスペースがあります:

awk '{system("rm -i " gensub(" ","\\\\ ","g",$10) ".torrent")}' 
+0

(今は決勝が終わったので、やっとこれを行う時間がありました)ありがとう!これは働いた – yougotborked

0

Perlはgrepawkまたはxargsを必要とせずにこれを行うことができます。

perl -lane 'if (/100%.*Finished/) { unlink "$F[9].torrent" or warn $! }' 

-nオプションがxargsとして動作する、すべての着信回線を処理する、if文はあなたのgrepとして働き、そしてrmなどunlinkます。 warnは厳密には必要ではありませんが、スクリプトがファイルの削除に失敗したかどうかを知ることができます。

だから、そうのようにそれを呼び出します。

transmission-remote http://localhost/transmission -l | perl -lane 'if (/100%.*Finished/) { unlink "$F[9].torrent" or warn $! }' 
関連する問題