我想排除以下文件类型:
- 电子书
- 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
而不是-x
。r
表示递归,因此它可以匹配深层文件夹层次结构中排除的文件
文件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'
这里,小贩,看法, 和文件目录已被排除。