我想使用 7zip 的 @listfile 功能创建一个包含名称相同但位于不同文件夹中的文件的 7zip 文件。虽然我已经使用 7zip CLI 很长时间了,但我找不到实现这一点的语法。
我的文件树看起来像这样(注意 somefile1.html 和 somefile2.html 各出现两次)。
| somefile2.html
+---dir1
| somefile1.html
| somefile2.html
|
+---dir2
| somefile3.html
| somefile4.html
|
\---dir3
somefile1.html
somefile5.html
使用@listfile 工作正常,但我无法弄清楚如何在执行此操作时在生成的 7zip 中保留目录树。
我尝试了以下语法:
7z a -ir@files.txt my_compressed_file.7z
然后,根据语法下 7zip 的 Windows CHM 帮助文件中的解释,我也尝试包含根文件夹(称为"file"):
7z a -ir@files.txt my_compressed_file.7z .\files
在这两种情况下,我都会遇到相同的错误:
Error
Duplicate filename:
somefile1.html
somefile2.html
有没有人想出这个并愿意解释一下?
我知道如何在不同的文件夹中压缩具有相同名称的文件(当文件夹结构保留在 7zip 中时,没问题)。但这一次我需要的几个文件到处都是......
最佳答案
以下用于 Windows 的命令,使用 shell 和 7za(7zip 的命令行版本)可能适用于其他平台;但这为我解决了问题:
1) 使用如下命令列出要存档的所有文件,包括完整路径;假设您的命令提示符位于 C:\目录中,并且您希望列出 C: 驱动器上所有子目录中的所有 *.xmp 文件,以便在下一步中存档:
DIR /B /S *.xmp > XMPsToArchiveList.txt
2) 使用 XMPsToArchiveList.txt 作为 7za 的列表文件,带有 -spf 开关,它指示 7za “使用完全限定的文件路径:”
7za a -spf -ir@XMPsToArchiveList.txt allCdriveXMPs.7z
如果一切顺利,您应该会收到幸福的消息:“一切正常”,并会看到一个新的正确命名的 .7z 存档。
在我的测试中,生成的 .7z 存档具有反射(reflect)所有 .xmp 文件的完整路径的文件夹和子文件夹,根文件夹名为“C:”。
笔记:
A) 在 Windows 上,要调整 list 命令以包含给定名称的这么多目录中的所有内容(在这么多不同的地方),您可以使用例如:
DIR /S /B *_aCertainFolderNameDuplicatedAllOverTheDrive* > foldersToArchive.txt
B) 2011-09-16 添加了 -spf 开关;回复:http://www.7-zip.org/history.txt
此外,我尝试使用通配符尝试生成您描述的列表,但没有任何运气将所有文件命名为例如somefile*.txt 到一个列表中(例如 archiveThisFiles.txt)。也许我打错了?看起来很简单。您需要在提示下乱七八糟才能找到适合您的方法。
最后,我不知道 -spf 开关是否可用于 7z(与 7za 相对)。 7za 在那边可用,在“额外”下载中:http://www.7-zip.org/download.html
关于directory - 使用 7z @listfile 功能在不同文件夹中压缩具有相同名称的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12675246/