2012-02-10 65 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名称,但是,有没有人有任何建议?我是否正确连接了.torrent扩展名和xargs

+1

是否洪流名称包含空格字符? – jcollado 2012-02-10 07:29:36

+0

对不起,以前没有回复(我完全认为我设置了电子邮件通知的帖子回复),不管有没有空白。我将在本周末尝试这两个答案。谢谢大家 – yougotborked 2012-02-16 04:16:09

回答

3

那么你不需要xargs为,awk能为你做它(只有部分):

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

更妙awk可以调用rm它:

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

如果您在torrent名称中有空间:

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

(现在总决赛结束了,我终于有时间做到了)谢谢!这一个工作 – yougotborked 2012-05-14 03:45:06

0

Perl可以在不需要grep,awkxargs的情况下执行此操作。

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

-n选项将处理所有进线,作为xargs,该if声明将作为你grep,并unlinkrmwarn不是严格必要的,但可能很高兴知道脚本是否无法删除文件。

所以,你会调用它像这样:

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