为什么 .RAR 文件包含同名的不同文件

发布于 2024-11-15 18:04:43 字数 264 浏览 3 评论 0原文

我得到一个 .RAR 文件,其中包含同名的不同文件。

例如,

index.txt 40 Text Document 04/01/2010 4:40PM
index.txt 22 Text Document 04/01/2010 4:42PM
index.txt 10 Text Document 04/01/2010 4:45PM
index.txt 13 Text Document 04/01/2010 4:50PM

为什么?

I got a .RAR file which contains different files with the same name.

For example,

index.txt 40 Text Document 04/01/2010 4:40PM
index.txt 22 Text Document 04/01/2010 4:42PM
index.txt 10 Text Document 04/01/2010 4:45PM
index.txt 13 Text Document 04/01/2010 4:50PM

Why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鹊巢 2024-11-22 18:04:43

正如之前所说,这些文件可能位于不同的路径中,但正如我将进一步展示的,情况并非总是如此。

如果您使用 WinRAR 列出文件内容并且您的选项设置如下,那么只会显示您有同名的文件,但它们位于不同的路径中。

  • 选项->文件列表->平面文件夹视图 (ctrl+h)
  • 选项 ->文件列表->详细信息

在 CRC32 列之后,有一个称为 Path(路径)的列。如果这是不同的,则在以下情况下提取应该不是问题:

  • Extract ->提取路径和选项->高级-> 提取相对路径已设置。

如果是不提取路径,由于文件系统限制,WinRAR 将需要要求您重命名它们。
我认为在这种情况下命令行 unrar 不会成为问题,因为您需要指定其他参数来更改其默认行为。

RAR 存档可能在同一目录中包含多个同名文件。如果您使用 Windows,请使用“C:\Program Files\WinRAR\Rar.exe”< /em>
而不是以下示例中命令行上的 rar

创建一个新文件并将其添加到 RAR 存档中。您还可以通过列出其内容来检查更改。

rar a rarfile.rar testfile.txt
rar l rarfile.rar
rar a rarfile.rar testfile.txt

如果您尝试重新添加此文件,rar 将以相同名称替换已添加的文件。

Updating archive rarfile.rar

Updating  testfile.txt                                                     OK
Done

创建其他文件或重命名第一个文件并将其添加到 RAR 文件中。

move testfile.txt second.txt            (new file)
rar a rarfile.rar second.txt            (add it)
rar lb rarfile.rar                      (list archive, bare info)

将第二个文件重命名为第一个文件的名称。

rar rn rarfile.rar second.txt testfile.txt

这就是在同一路径中创建包含多个同名文件的 RAR 文件的方法。这些步骤在 WinRAR 中是类似的。如果您尝试再次重命名该文件,该目录中所有文件的文件名也会更改

为什么有人想要这样做?

我能想到的唯一解释是创建此存档的人想要模仿版本控制/备份系统。但是,如果您只想提取一个特定版本并且它不是第一个版本,则 WinRAR 会提取错误的文件。看来我发现了一个非常晦涩的 WinRAR bug :-)

编辑:在 RAR 文档中找到这个之后,似乎是一个糟糕的解释:

-ver[n] 文件版本控制

        更新时强制 RAR 保留以前的文件版本
        已存在的存档中的文件。旧版本是
        重命名为“filename;n”,其中“n”是版本号。

        默认情况下,在不使用开关解压存档时
        -ver,RAR 只提取最后添加的文件版本,名称
        其中不包含数字后缀。但如果你指定
        一个确切的文件名,包括版本,它也将是
        打开包装。例如,“rar x arcname”将仅解压
        最新版本,当“rar x arcname file.txt;5”将解压时
        'file.txt;5'(如果存档中存在)。

        如果在解包时指定不带参数的 -ver 开关,
        RAR 将提取所有匹配文件的所有版本
        输入的文件掩码。在这种情况下,版本号是
        未从解压文件名中删除。您还可以提取
        指定其编号作为 -ver 参数的具体文件版本。
        它会告诉 RAR 仅解压此版本并删除
        文件名中的版本号。例如,
        'rar x -ver5 arcname' 将仅解压第 5 个文件版本。

        如果在归档时指定“n”参数,则会限制
        存档中存储的文件版本的最大数量。
        超过此阈值的旧文件版本将被删除。

Like said before, the files could be in separate paths, but as I'll show further, this isn't always the case.

If you use WinRAR to list the file contents and your options are set as the following, then it only appears you have files with the same name, but they are in different paths.

  • Options -> File list -> Flat folders view (ctrl+h)
  • Options -> File list -> Details

After the column CRC32, there is one called Path. If this is different, extraction shouldn't be a problem if:

  • Extract -> Extraction path and options -> Advanced -> Extract relative paths is set.

If it is Do not extract paths, WinRAR will need to ask you to rename them because of file system limitations.
I assume command line unrar won't be a problem in this case because you need to specify additional parameters to change its default behavior.

It is possible for a RAR archive to have multiple files with the same name in the same directory. If you use Windows, use "C:\Program Files\WinRAR\Rar.exe"
instead of rar on the command line in the following examples.

Create a new file and add it to a RAR archive. You can also check the changes by listing its contents.

rar a rarfile.rar testfile.txt
rar l rarfile.rar
rar a rarfile.rar testfile.txt

If you try to re-add this file, rar will replace the already added file with the same name.

Updating archive rarfile.rar

Updating  testfile.txt                                                     OK
Done

Create an other file or rename the first one and add it to the RAR file.

move testfile.txt second.txt            (new file)
rar a rarfile.rar second.txt            (add it)
rar lb rarfile.rar                      (list archive, bare info)

Rename the second file to the first one's name.

rar rn rarfile.rar second.txt testfile.txt

This is how you create a RAR file with multiple files of the same name in the same path. These steps will be similar in WinRAR. If you try to rename the file again, the file name of all files in that directory will change too.

Why would someone want to do this?

The only explanation I can think of is that the person that created this archive wanted to imitate a version control/backup system. But if you want to extract only one specific version and it isn't the first one, WinRAR extracts the wrong file. It seems I've found a very obscure WinRAR bug :-)

Edit: seems a bad explanation after finding this in the RAR documentation:

-ver[n] File version control

        Forces RAR to keep previous file versions when updating
        files in the already existing archive. Old versions are
        renamed to 'filename;n', where 'n' is the version number.

        By default, when unpacking an archive without the switch
        -ver, RAR extracts only the last added file version, the name
        of which does not include a numeric suffix. But if you specify
        a file name exactly, including a version, it will be also
        unpacked. For example, 'rar x arcname' will unpack only
        last versions, when 'rar x arcname file.txt;5' will unpack
        'file.txt;5', if it is present in the archive.

        If you specify -ver switch without a parameter when unpacking,
        RAR will extract all versions of all files that match
        the entered file mask. In this case a version number is
        not removed from unpacked file names. You may also extract
        a concrete file version specifying its number as -ver parameter.
        It will tell RAR to unpack only this version and remove
        a version number from file names. For example,
        'rar x -ver5 arcname' will unpack only 5th file versions.

        If you specify 'n' parameter when archiving, it will limit
        the maximum number of file versions stored in the archive.
        Old file versions exceeding this threshold will be removed.
丑丑阿 2024-11-22 18:04:43

他们很可能走在不同的道路上。

尝试输出完整路径。或者看看当你提取它们时会发生什么。

你可能会看到类似的东西:

索引.txt
路径1/index.txt
路径2/index.txt

等等

they are in different paths, most likely.

try outputting the full path. or see what happens when you extract them.

you'll probably see something like:

index.txt
path1/index.txt
path2/index.txt

etc etc

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文