为什么7za要“替换现有文件”(解压后的文件夹结构错误)?

为什么7za要“替换现有文件”(解压后的文件夹结构错误)?

好的,所以我想使用 7za 解压一个档案;我在 Windows 10 上的 MSYS2 的 MINGW64 shell 中。

因此,我首先打开一个新的空目录:

$ mkdir temp
$ cd temp/

让我们确定一下——这个目录真的是空的吗?

$ ls -la
total 12K
drwxr-xr-x 1 user None 0 May 20 14:23 ./
drwxr-xr-x 1 user None 0 May 20 14:23 ../

确实如此。让我们来看看我们的档案:

$ wget https://sysprogs.com/getfile/1748/openocd-20211118.7z
...

Saving to: ‘openocd-20211118.7z’

openocd-20211118.7z           100%[=================================================>]   7.97M  10.4MB/s    in 0.8s

2022-05-20 14:24:32 (10.4 MB/s) - ‘openocd-20211118.7z’ saved [8359495/8359495]

很好...那么,现在 - 为了稍后将揭示的目的 - 首先让我们检查里面的档案,看看在哪里可以找到该文件ftd2xx.lib

$ 7za l openocd-20211118.7z | grep ftd2xx.lib
2020-07-12 18:45:55 ....A        18652       489886  OpenOCD-20211118-0.11.0/drivers/FTDI CDM v2.08.28 Certified/amd64/ftd2xx.lib
2020-07-12 18:45:55 ....A        20418               OpenOCD-20211118-0.11.0/drivers/FTDI CDM v2.08.28 Certified/i386/ftd2xx.lib
2020-07-12 18:45:55 ....A      1014926               OpenOCD-20211118-0.11.0/drivers/FTDI CDM v2.08.28 Certified/Static/amd64/ftd2xx.lib
2020-07-12 18:45:55 ....A       904088               OpenOCD-20211118-0.11.0/drivers/FTDI CDM v2.08.28 Certified/Static/i386/ftd2xx.lib

好的,因此有四个这样的文件 - 但它们都在各自的目录中;而且,看起来整个档案都“包裹”在“父”文件夹 OpenOCD-20211118-0.11.0 中 - 好吧,如果是这样的话,太好了,我可以直接解压(就像我做的那样unzip)?

$ 7za e openocd-20211118.7z

7-Zip (a) [64] 17.04 : Copyright (c) 1999-2021 Igor Pavlov : 2017-08-28
p7zip Version 17.04 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-7700T CPU @ 2.90GHz (906E9),ASM,AES-NI)

Scanning the drive for archives:
1 file, 8359495 bytes (8164 KiB)

Extracting archive: openocd-20211118.7z
--
Path = openocd-20211118.7z
Type = 7z
Physical Size = 8359495
Headers Size = 14117
Method = LZMA2:24 BCJ
Solid = +
Blocks = 2


Would you like to replace the existing file:
  Path:     ./ftd2xx.lib
  Size:     18652 bytes (19 KiB)
  Modified: 2020-07-12 18:45:55
with the file from archive:
  Path:     OpenOCD-20211118-0.11.0/drivers/FTDI CDM v2.08.28 Certified/i386/ftd2xx.lib
  Size:     20418 bytes (20 KiB)
  Modified: 2020-07-12 18:45:55
? (Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename all / (Q)uit? q

Archives with Errors: 1



Break signaled

等等,什么?我为什么要找一个文件覆盖???

我从空的文件夹(之前已确认),我可以在列表中看到,所有这些文件都包裹在一个父文件夹中,然后该文件夹包含单独的文件夹...为什么会有一个文件被覆盖?

那么,现在让我们看看文件夹的内容:

$ ls
 amd64/       drivers/                        libdcc/                    Static/        xmc1xxx/
 arc/         erase_check/                    lm3s/                      ST-Link/       xscale/
 arm/         flash/                          loaders/                   stm32/         xsvf_tools/
 at91/        fm4/                            marvell/                   target/        driver.xml
 at91sam7x/   fpga/                           openocd/                   test/          ftd2xx.h
 atmel/       ft232r/                         OpenOCD-20211118-0.11.0/   ti/            ftd2xx.lib
 bin/         ftdi/                           OpenULINK/                 tools/         ftdibus.cat
 board/      'FTDI CDM v2.08.28 Certified'/   remote_bitbang/            transport/     ftdibus.inf
 checksum/    gti/                            rpc_examples/              watchdog/      ftdiport.cat
 chip/        i386/                           rtos-helpers/              WinUSB/        ftdiport.inf
 contrib/     infineon/                       scripts/                   WinUSB_Mini/   openocd-20211118.7z
 cpld/        interface/                      share/                     x64/
 cpu/         kinetis/                        spear/                     x86/
 debug/       kinetis_ke/                     st/                        xds110/

什么??!这一切是从哪里来的??

此存档的内容不是应该位于名为 的父文件夹中吗OpenOCD-20211118-0.11.0/?为什么我在这里看到所有这些子文件夹,而不只是单个子OpenOCD-20211118-0.11.0/文件夹?

这是怎么回事?我怎样才能解压 7z 档案,并且保持打包的文件夹结构完好无损?

答案1

您可以尝试通过以下方式执行命令:

7za x openocd-20211118.7z

x将确保您已提取具有完整路径的文件

相关内容