9

我有一个要压缩的文件列表,但我也有一个排除文件的列表,不希望它们包含在 zip 存档中。

所以我创建了一个 exclude.lst 文件,其中包含绝对路径和文件名。

样本排除文件

/home/logs/apache/access.log
/home/logs/tomcat/catalina.out

但在使用以下命令后,zip 命令不排除文件,而是将它们存档。

zip archives.2012.zip /home/logs/ -x@exclude.lst

我该如何克服呢?还有没有其他方法可以通过排除上述文件来归档文件。

4

4 回答 4

6

我没有创建 exclude.lst 文件,而是将所有排除文件分配给一个变量并将它们传递给 zip 中的 -x 选项。

例如

do_not_archive=/home/logs/apache/access.log /home/logs/tomcat/catalina.out

然后使用zip如下图

zip archives.2012.zip /home/logs/ -x $do_not_archive
于 2012-06-19T16:13:53.563 回答
2

老问题,所以 zip 从那时起可能已经改变了,但是来自手册页:

$man zip | grep -a2 exclude

也可以:
zip -r foo foo -x@exclude.lst
它将在 foo.zip 中包含 foo 的内容,同时排除与文件 exclude.lst 中的模式匹配的所有文件。

我已经确认这在 Ubuntu 18 中有效,每个模式/文件名都在单独的行上(没有尝试用空格分隔)

于 2019-03-27T06:21:21.873 回答
0

对于您有一堆文件要排除的情况(在我的情况下文件大于 10MB),CBR 的答案只是一个简短的补充:

do_not_archive=$(find relative/path/to/directory -type f -size +10000000c)
zip -r backup_without_files_bigger_than_10mb.zip relative/path/to/directory -x $do_not_archive
于 2019-01-25T16:51:46.683 回答
0

可以分两步执行此操作:

zip archive.zip -r -@ < include.lst
zip archive.zip -d -@ < exclude.lst
于 2021-06-14T14:41:58.570 回答