XARG для конкатенации расширения на аргумент - PullRequest
3 голосов
/ 10 февраля 2012

Я пытаюсь настроить скрипт для автоматического удаления файла .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 ]

3 голосов
/ 10 февраля 2012

Ну, вам не нужно xargs для этого, awk может сделать это для вас (только эта часть):

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

Еще лучше awk можете позвонить rm на него:

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

Если в именах торрентов есть пробелы:

awk '{system("rm -i " gensub(" ","\\\\ ","g",$10) ".torrent")}'
0 голосов
/ 11 февраля 2012

Perl может сделать это без необходимости grep, awk или xargs.

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

Опция -n будет обрабатывать все входящие строки, действуя как xargs, оператор if будет действовать как ваш grep, а unlink как rm. warn не является строго обязательным, но было бы неплохо узнать, не удается ли сценарию удалить файл.

Так вы бы назвали это так:

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