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

joc*_*ter 10 compression directory 7zip duplicates

我想使用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
Run Code Online (Sandbox Code Playgroud)

使用@listfile工作正常,但我无法弄清楚如何在生成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
Run Code Online (Sandbox Code Playgroud)

有没有人想出这个,并想关注它?

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

小智 7

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

  • 是的,欢迎来到Stack Overflow,即使你的答案是正确的,也会有人批评它! (7认同)
  • 看我的答案。解决方案为7za引入了一个开关(我不知道7z是否存在相同的开关,但如果不存在,则会感​​到惊讶。) (2认同)

bar*_*art 6

我在使用列表文件时遇到了同样的错误(重复文件名).我的列表文件看起来像这样:

D:\SomeDir\SomeFile.txt
D:\SomeOtherDir\SomeFile.txt
Run Code Online (Sandbox Code Playgroud)

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

SomeDir\SomeFile.txt
SomeOtherDir\SomeFile.txt
Run Code Online (Sandbox Code Playgroud)

生成的存档保留了原始目录结构,看起来完全符合我的预期.

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

我运行的PowerShell命令行是:

& 'C:\Program Files\7-Zip\7z.exe' a -scsWIN logs.7z `@recentlogs.txt
Run Code Online (Sandbox Code Playgroud)


Ale*_*all 6

以下 Windows 命令,使用 shell 和 7za(7zip 的命令行版本)可能适用于其他平台;但这为我解决了问题:

1) 使用如下命令列出要存档的所有文件,包括完整路径;假设您的命令提示符位于 C:\ 目录中,并且您希望列出 C: 驱动器上所有子目录中的所有 *.xmp 文件,以便在下一步中存档:

DIR /B /S *.xmp > XMPsToArchiveList.txt
Run Code Online (Sandbox Code Playgroud)

2) 使用 XMPsToArchiveList.txt 作为 7za 的列表文件,带有 -spf 开关,它指示 7za “使用完全限定的文件路径:”

7za a -spf -ir@XMPsToArchiveList.txt allCdriveXMPs.7z
Run Code Online (Sandbox Code Playgroud)

如果一切顺利,您应该会收到令人欣喜的消息:“一切正常”,并会看到一个新的正确命名的 .7z 存档。

在我的测试中,生成的 .7z 存档具有反映所有 .xmp 文件的完整路径的文件夹和子文件夹,根文件夹名为“C:”。

笔记:

A) 在 Windows 上,要调整 list 命令以包含给定名称的许多目录中的所有内容(在许多不同的地方),您可以使用例如:

DIR /S /B *_aCertainFolderNameDuplicatedAllOverTheDrive* > foldersToArchive.txt
Run Code Online (Sandbox Code Playgroud)

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