xargs将扩展连接到参数上

时间:2012-02-10 06:06:41

标签: awk xargs

我正在尝试设置一个脚本,根据.torrent的输出自动删除transmission-remote文件。

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名称相同

root@mfalc:/mnt/samba/Dropbox/# ls
MyTorrent.torrent
root@mfalc:/mnt/samba/Dropbox/# 

以下是awk

之前的样子
root@mfalc:~# 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连接起来了?

2 个答案:

答案 0 :(得分:3)

那么你不需要xargsawk可以为你做(只有那部分):

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

更好的awk可以在其上调用rm

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

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

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

答案 1 :(得分:0)

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

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

-n选项将处理所有传入的行,充当xargsif语句将充当您的grepunlink充当rm 1}}。 warn不是绝对必要的,但是知道脚本是否无法删除文件可能会很好。

所以你会这样称呼它:

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