Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将xargs参数更改为每个参数包含一个标志的方法?_Bash_Command Line_Grep_Xargs - Fatal编程技术网

Bash 将xargs参数更改为每个参数包含一个标志的方法?

Bash 将xargs参数更改为每个参数包含一个标志的方法?,bash,command-line,grep,xargs,Bash,Command Line,Grep,Xargs,我在xargs方面有一些经验,但我不太知道如何做到这一点: 我使用tarsnap--list archives 我想删除某一天的所有档案(每天制作24份) 我可以使用xargs来实现这一点: tarsnap --list-archives | grep 2014-06-09 | xargs -n 1 tarsnap -df 但是,每次使用一个参数反复运行tarsnap(这是预期的): tarsnap文档说明,您可以通过传入多个-f标志来删除多个存档: tarsnap -d -f 2014-

我在xargs方面有一些经验,但我不太知道如何做到这一点:

  • 我使用
    tarsnap--list archives
  • 我想删除某一天的所有档案(每天制作24份)
我可以使用xargs来实现这一点:

tarsnap --list-archives | grep 2014-06-09 | xargs -n 1 tarsnap -df
但是,每次使用一个参数反复运行tarsnap(这是预期的):

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多次运行,一次运行一个参数……但我可能是错的)

您可以使用
sed
-f
插入到每个项目之前的列表中:

tarsnap --list-archives | grep 2014-06-09 | sed 's/^/-f /' | xargs tarsnap -d

使用与@choroba非常类似的想法,您可以完全摆脱
grep
,而使用
sed

tarsnap --list-archives | sed -n '/2014-06-09/s/^/-f /p' | xargs tarsnap -d

如果
tarsnap
不接受空格(即-f2014-06-09),则可以使用GNU并行上下文替换:

tarsnap --list-archives | parallel -Xj1 tarsnap -d -f{}

实际上,您可以使用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 

感谢您的快速回复@choroba!谢谢你的快速回复!将对此进行一次尝试:)
$ 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