使用通配符和异常删除tar中的文件

ten*_*x2j 1 unix bash shell tar

我有一个tarball,我想删除其中 pkgIndex.tcl 以外的所有 .tcl ,.bat,.log文件。

如果我做

tar --delete -f mytarball.tar --wildcards *{.tcl,.log,.bat}
Run Code Online (Sandbox Code Playgroud)

我的pkgIndex.tcl将被删除,如何将其作为例外添加到我的模式通配符中?

刚刚尝试

tar  --delete -f mytarball.tar --wildcards *{.tcl,.log}  --exclude=*pkgIndex.tcl
Run Code Online (Sandbox Code Playgroud)

tar  --delete -f mytarball.tar --wildcards *{.tcl,.log}  --exclude=pkgIndex.tcl
Run Code Online (Sandbox Code Playgroud)

无济于事...

Der*_*rfK 5

看起来GNU tar在使用--delete时会忽略--exclude。

您可以tar tf mytarball.tar --wildcards *{.tcl,.log} | grep -v pkgIndex.tcl | tar --delete -f mytarball.tar -T -代替。这将列出与* .tcl或* .log匹配的所有文件, pkgIndex.tcl以外的所有文件都使用grep ,然后将列表通过管道传送回tar,这会将这些文件从tarball中删除。

  • 除了使用 `grep` 之外,还可以将 `--exclude` 与 `tar t` 一起使用。 (2认同)