使用7z @listfile功能在不同文件夹中压缩具有相同名称的文件

时间:2012-10-01 14:28:27

标签: directory compression duplicates 7zip

我想使用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

使用@list文件可以正常工作,但我无法弄清楚如何在生成7zip时保留目录树。

我尝试了以下语法:

7z a -ir@files.txt my_compressed_file.7z

然后,鉴于7zip的Windows CHM帮助文件在语法下的解释,我尝试包括根文件夹(称为“文件”):

7z a -ir@files.txt my_compressed_file.7z。\ files

我在两种情况下都得到同样的错误:

Error
Duplicate filename:
somefile1.html
somefile2.html

有没有人想过这个,并且会关注它?

我知道如何在不同的文件夹中压缩具有相同名称的文件(否则在7zip中保留文件夹结构时没问题)。但是这次我需要的几个文件遍布整个地方......

6 个答案:

答案 0 :(得分:7)

多年来,这在7zip中一直是一个巨大的错误。 7zip的作者已多次报道......但他们似乎并不理解。我避免使用7zip。

答案 1 :(得分:6)

我在使用列表文件时遇到了同样的错误(重复文件名)。我的列表文件如下所示:

D:\SomeDir\SomeFile.txt
D:\SomeOtherDir\SomeFile.txt

我通过从D:\启动7-zip并编辑我的列表文件以使用相对路径而不是绝对路径来解决问题:

SomeDir\SomeFile.txt
SomeOtherDir\SomeFile.txt

生成的存档保留了原始目录结构,看起来与我预期的完全一样。

注意:我使用的是7-Zip 4.65,如果文件位于不同的驱动器上或具有不同的根目录,则此解决方案将无效。

我运行的PowerShell命令行是:

& 'C:\Program Files\7-Zip\7z.exe' a -scsWIN logs.7z `@recentlogs.txt

答案 2 :(得分:3)

我的真实目录结构是:

+---Release
|   |   Lib.dll
|   \--- x64
|           Lib.dll
|       
+---Definition_files
|       data_files
|       
+---x64
|       Lib.dll // Copy of the previous file (only to preserve "x64" directory")
\---Documentation
        documentation_files....

我使用了列表文件:

 .\Release\Lib.dll // used ".\" to remove "Release" directory
 Definition_files\data_files
 Documentation\documentation_files
 x64\Lib.dll

命令行:

7z.exe a -mx=9 -mpass=5 -r .\Packgakes\release.zip .@Lib.lst

这导致了双重错误。没有“-r”就没有错误。

如果确实没有两个文件具有相同的目标路径(在文件路径中使用“。”删除输出中的路径),请尝试检查命令行以进行递归扫描和文件列表。。 p>

答案 3 :(得分:3)

以下命令用于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存档包含反映所有.xmp文件的完整路径的文件夹和子文件夹,其根文件夹标题为" C:"。

注意:

A)在Windows上,为了使list命令适应包含给定名称的许多目录中的所有内容(在很多不同的地方),你可以使用例如:

DIR /S /B *_aCertainFolderNameDuplicatedAllOverTheDrive* > foldersToArchive.txt

B)-spf开关添加2011-09-16; re:http://www.7-zip.org/history.txt

另外,我尝试使用通配符来尝试生成一个像你描述的列表,但是没有任何运气可以获得所有文件,例如: somefile * .txt到列表中(例如archiveTheseFiles.txt)。也许我输错了?看似简单。你需要在提示符处乱七八糟地找到对你有用的东西。

最后,我不知道-spf开关是否可用于7z(而不是7za)。 7za可以在这些" extras"下载:http://www.7-zip.org/download.html

答案 4 :(得分:2)

由于7z是错误的,如果您坚持使用7z进行压缩,请先尝试使用tar创建.tar存档,然后创建.tar.7z存档。

答案 5 :(得分:0)

自7-zip 9.38 beta以来,您可以选择路径模式:relative,full,absolute。