从 tar 存档中删除文件的 grep 输出列表

Remove a grep output list of files from a tar archive

我想从 tar 存档中删除文件名中匹配正则表达式模式的文件。我目前的流程是:

tar -tf LC080330242019031901T1-SC20190606111327.tar | grep _b[1-9] | 

我在哪里查询tar中的文件。这给出了输出:

LC08_L1TP_033024_20190319_20190325_01_T1_b10.tif
LC08_L1TP_033024_20190319_20190325_01_T1_b11.tif
LC08_L1TP_033024_20190319_20190325_01_T1_b2.tif
LC08_L1TP_033024_20190319_20190325_01_T1_b1.tif
LC08_L1TP_033024_20190319_20190325_01_T1_b6.tif
LC08_L1TP_033024_20190319_20190325_01_T1_b8.tif
LC08_L1TP_033024_20190319_20190325_01_T1_b5.tif
LC08_L1TP_033024_20190319_20190325_01_T1_b3.tif
LC08_L1TP_033024_20190319_20190325_01_T1_b4.tif
LC08_L1TP_033024_20190319_20190325_01_T1_b9.tif
LC08_L1TP_033024_20190319_20190325_01_T1_b7.tif

但是我终其一生都找不到从 tar 文件中删除此文件列表的命令。

正如我在评论中提到的,使用 tar -tf test.tar | grep <regex> | xargs --replace=FILES tar -f test.tar --delete FILES 对我有用,因为我正在检查我是否能够在我的本地环境中使用它。

我不确定为什么 xargs 是命令工作所必需的,因为我最初也是这样,虽然用 grep 的输出调用 tar 会工作,但咨询手册页,事实证明这正是 xargs 的用途:从标准输入构建和执行命令行命令。

我以前的大部分使用都来自于我需要使用 xargs -n 1 一个一个地处理参数时,但学习起来非常有趣。