使用 7-Zip 从存档中提取特定文件

使用 7-Zip 从存档中提取特定文件

我运行 Linux Live CD,需要从位于磁盘驱动器上的 wim 存档中提取特定文件。我知道存档中文件的完整路径:

xubuntu@xubuntu:~$ 7z l winRE.wim | grep -i bootrec.exe
2009-08-28 15:02:29 ....A       299008       134388  Windows/System32/BootRec.exe

我的磁盘空间不足,无法解压整个存档。

我如何从存档中提取该特定文件?

我尝试了该-i选项,但不起作用:

xubuntu@xubuntu:~$ 7z x -i Windows/System32/BootRec.exe winRE.wim 


Error:
Incorrect command line

答案1

man 7z页面说:

  -i[r[-|0]]{@listfile|!wildcard}
         Include filenames

您需要!在文件名之前显式指定并使用单引号保护开关免受 bash 扩展:7z x '-i!Windows/System32/BootRec.exe' winRE.wim

xubuntu@xubuntu:~$ 7z x '-i!Windows/System32/BootRec.exe' winRE.wim

7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,4 CPUs)

Processing archive: winRE.wim

Extracting  Windows/System32/BootRec.exe

Everything is Ok

Size:       299008
Compressed: 227817568

(您可以使用函数字母来避免保留完整路径e7z e '-i!Windows/System32/BootRec.exe' winRE.wim。)

顺便说一句,如果您不-i使用单引号保护选项或使用双引号保护它,则会出现错误:

xubuntu@xubuntu:~$ 7z x "-i!Windows/System32/BootRec.exe" winRE.wim 
bash: !Windows/System32/BootRec.exe: event not found

答案2

7z e [archive name] -o[direction] [filename] -r

例如:

7z e 'Movies.rar' -o/root/Downloads/ 'Rush.mp4' -r

这个命令对我有用,我在 ubuntu 服务器 16.04 上尝试过。

答案3

为我工作(您可能想使用正斜杠,见下文):(
7z e -so 'file.zip' 'file\path\file.png' > 'file.png'
从 ZIP 文件中提取的一个 PNG 文件:该命令将创建或覆盖当前目录中名为“file.png”的任何文件。e:提取保留文件名但不保留文件路径-so:输出到标准输出。)

不适合我:

7z e 'file.zip' 'file.png' -r
7z e 'file.zip' -o. 'file.png' -r
7z e 'file.zip' -o'.' 'file.png' -r
7z e '-i!file.png' 'file.zip'
7z e '-i!file/path/file.png' 'file.zip'
7z e '-i!/file/path/file.png' 'file.zip'

为什么这些命令对我不起作用,但只有一个命令对我起作用?可能是因为 ZIP 文件中的文件路径中的文件夹分隔符是反斜杠而不是正常的正斜杠。也许我应该使用反斜杠(\)或转义反斜杠(\\)运行这些命令,然后它就会起作用。

如果您有一个 ZIP 文件,其中不鼓励使用反斜杠 (https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT§4.4.17.1)在文件路径中显然您还可以通过以下解压缩命令从中提取单个文件:
unzip -p file.zip 'path\\to\\file.png'

(信用:https://archived.moe/g/thread/85892819#85900314

相关内容