7zip:如何排除文件类型?

dak*_*aka 9 command-line archive 7zip wildcards

我想排除以下文件类型:

  • 电子版
  • pdf
  • html(也是大写)
  • azw3
  • 手机
  • 运维
  • 文本

到目前为止,我有这个似乎不起作用,我收到一条错误消息,说“命令行不正确”。

7z e "-x!*.epub" "-x!*.pdf" "-x!*.html" "-x!*.azw3" "-x!*.mobi" "-x!*.txt" "-x!*.HTML" "-x!*.opf" *
Run Code Online (Sandbox Code Playgroud)

我也试过上面没有双引号的命令。

我使用这里的信息(对于 Windows)创建了上述命令,但它似乎在 Linux 下不起作用。

Ron*_*Ron 12

来自man 7z

-x[r[-|0]]]{@listfile|!wildcard}
              Exclude filenames
Run Code Online (Sandbox Code Playgroud)

要排除文件(或类型),您可以使用以下命令:

7z a -xr@exclude.txt backup.7z /whatever/dirs/or/files

注意-xr而不是-x。该r指示递归,因此它可以匹配深文件夹层次结构中排除的文件

该文件exclude.txt是一个由回车分隔的列表,如下所示:

*.epub
*.pdf
*.html 
*.HTML
*.azw3
*.mobi
*.opf
*.txt
Run Code Online (Sandbox Code Playgroud)


kos*_*kos 11

7z仅在其参数中接受单个存档,但您传递的是一个通配符,该通配符扩展到当前工作目录的全部内容;另一个问题是参数中的通配符也会扩展,无论是非引用还是双引号。

所以你应该只为每个命令提取一个存档;您应该删除最后的通配符,指定单个存档并单引号参数:

7z e '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf' archive.7z
Run Code Online (Sandbox Code Playgroud)

但是,要一次提取多个档案,您可以使用多种方法:

  • bash
7z e '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf' archive.7z
Run Code Online (Sandbox Code Playgroud)
  • find
for archive in *.7z; do 7z e '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf' "$archive"; done
Run Code Online (Sandbox Code Playgroud)