我对xargs有一些经验,但我不太清楚如何做到这一点:
tarsnap --list-archives
我可以使用xargs来实现这个目标:
tarsnap --list-archives | grep 2014-06-09 | xargs -n 1 tarsnap -df
然而,这会一次又一次地使用一个参数(预期)运行tarsnap:
tarsnap -df 2014-06-09-00
tarsnap -df 2014-06-09-01
tarsnap -df 2014-06-09-02
... etc ...
tarsnap文档声明您可以通过传入多个-f
标记来删除多个存档:
tarsnap -d -f 2014-06-09-00 -f 2014-06-09-01 -f 2014-06-09-02 # ... and so on
有没有办法用xargs来实现这个目标?
(旁白:即使这样做也许毫无意义,因为我感觉有多个-f
标志运行tarsnap只会导致tarsnap多次运行,一次一个参数...但我可以是错的)
答案 0 :(得分:3)
您实际上可以使用xargs
执行此操作$ archivelist=$(tarsnap --list-a|xargs -I {} echo "-f {} ")
$ echo $archivelist
-f 2014-06-09-00 -f 2014-06-09-01 -f 2014-06-09-02 -f 2014-06-09-03
答案 1 :(得分:2)
您可以在-f
的所有项目之前将sed
注入列表:
tarsnap --list-archives | grep 2014-06-09 | sed 's/^/-f /' | xargs tarsnap -d
答案 2 :(得分:2)
使用与@ choroba相似的想法,您可以完全摆脱grep
并使用sed
代替:
tarsnap --list-archives | sed -n '/2014-06-09/s/^/-f /p' | xargs tarsnap -d
答案 3 :(得分:0)
如果tarsnap
不接受空格(即-f2014-06-09),您可以使用GNU Parallel和上下文替换:
tarsnap --list-archives | parallel -Xj1 tarsnap -d -f{}