使用特定过滤压缩文件夹结构

使用特定过滤压缩文件夹结构

我有一个像这样的文件夹结构:

/foo
/foo/bar
/foo/bar2
/foo/bar3

在每个文件夹(包括/foo)中,我都有名称结尾的文件.txt。但是,我想排除这些文件/foo,并包含 /foo/bar /foo/bar2 等中的文件。

但是,如果我这样做:

tar cvfz foo.tgz --exclude="/foo/*.txt" /foo

我错过了.txt完整层次结构中的所有文件,而不仅仅是/foo.

有人知道如何实现这一目标吗?

答案1

不确定是否可以只使用 tar 来做到这一点,因为--exclude似乎只接受 glob 样式的模式。但是您可以使用 find 获取文件列表,然后使用正则表达式使用 grep 过滤这些文件。

find foo -type f -print0 | grep -z -v '^foo/[^/]*.txt$' | tar cvf foo.tgz --null -T -

选项-print0-z--null指示相应的命令使用空字节而不是换行符来分隔记录(文件名)。这是一个很好的做法,因为某些文件可能包含意外字符。

相关内容