我运行 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
(您可以使用函数字母来避免保留完整路径e
:7z 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'