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

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

我想排除以下文件类型:

  • 电子书
  • pdf
  • html (同样大写)
  • azw3
  • 手机
  • 最佳选择
  • TXT

到目前为止我得到的答案似乎不起作用,我收到一条错误消息,提示“命令行不正确”。

7z e "-x!*.epub" "-x!*.pdf" "-x!*.html" "-x!*.azw3" "-x!*.mobi" "-x!*.txt" "-x!*.HTML" "-x!*.opf" *

我也尝试了上述不带双引号的命令。

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

答案1

man 7z

-x[r[-|0]]]{@listfile|!wildcard}
              Exclude filenames

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

7z a [email protected] backup.7z /whatever/dirs/or/files

注意使用-xr而不是-xr表示递归,因此它可以匹配深层文件夹层次结构中排除的文件

文件exclude.txt是文件或文件类型的列表,以回车符分隔,如下所示:

*.epub
*.pdf
*.html 
*.HTML
*.azw3
*.mobi
*.opf
*.txt

答案2

7z只接受参数中的单个存档,但您传递了一个通配符,它​​会扩展为当前工作目录的完整内容。另一个问题是,参数中的通配符也会扩展,无论是非引号还是双引号。

因此,每个命令只能提取一个档案。您应该删除末尾的通配符,指定单个档案并用单引号括住参数:

7z e '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf' archive.7z

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

  • bash

    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
    
  • find

    find . -maxdepth 1 -type f -iname "*.7z" -exec 7z e '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf' {} \;
    

答案3

也许在提出问题时无法从多个档案中提取。

截至 2020 年,7z 从多个档案中提取,但您需要使用特殊标志指定它们:

       -ai[r[-|0]]{@listfile|!wildcard}
              Include archives

文档

archive_name请注意,当您使用此功能时,您不再需要在命令行上指定(您传递的位置*),因此您需要禁用它带着-an旗帜。

其余标志的作用与你放置的一样,但引号除外:它们是必要的,以避免被你的 shell 解释!*在 bash 中,双引号 ( "..") 仍然允许扩展,因此需要使用单引号 ( '...')。另一种方法是转义这些字符,例如-x\!\*.html

因此你的命令变成:

7z e -an '-ai!*' '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf'

我的建议是让包含标志比 更具体一些*,因为它将选择目录中的所有文件。由于您使用了命令e(而不是x)并且没有指定输出目录(使用-o标志),因此当前目录将填充存档中的所有文件。这意味着如果您再次运行相同的命令,*选择器现在不仅会选择存档,还会选择所有提取的文件。

答案4

如果您想排除完整目录(您可能将此扩展文件放在目录中)

 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on ~/bkpFile_$(date +"%d_%b_%Y").1.7z /home/ubuntu/projectfile -mx0 '-xr!vendor' '-xr!view' '-xr!documents' 

这里,小贩看法, 和文件目录已被排除。

相关内容