更改xargs参数以在每个参数中包含标志的方法?

Jul*_*Lam 3 bash command-line grep xargs

我对xargs有一些经验,但是我不太了解该怎么做:

  • 我有一个使用tarsnap检索的档案列表 tarsnap --list-archives
  • 我想删除某一天的所有存档(每天制作24个)

我可以使用xargs完成此操作:

tarsnap --list-archives | grep 2014-06-09 | xargs -n 1 tarsnap -df
Run Code Online (Sandbox Code Playgroud)

但是,这一次一次只需要一个参数就反复运行tarsnap(这是预期的):

tarsnap -df 2014-06-09-00
tarsnap -df 2014-06-09-01
tarsnap -df 2014-06-09-02
... etc ...
Run Code Online (Sandbox Code Playgroud)

tarsnap文档指出可以通过传递多个-f标志来删除多个归档:

tarsnap -d -f 2014-06-09-00 -f 2014-06-09-01 -f 2014-06-09-02 # ... and so on
Run Code Online (Sandbox Code Playgroud)

有没有办法用xargs做到这一点?

(此外:这样做可能毫无意义,因为我感觉运行带有多个-f标志的tarsnap只会导致tarsnap多次运行,一次仅一个参数...但我可能错了)

mar*_*ell 5

您实际上可以使用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 
Run Code Online (Sandbox Code Playgroud)