您应该使用-j(垃圾路径(不要生成目录))修饰符(oldv5.52有它)。这是完整的列表:[die]: unzip(1) - Linux man page,或者您可以在终端中运行(${PATH_TO}/)解压缩,它将输出参数列表。
考虑到您希望提取名为target的文件夹中的文件,请使用命令(您可能需要指定解压缩的路径):"unzip" -j "a.zip" -d "target" "folder1/folder2/inner.txt"
输出(Win,但对于Nix,这是相同的事情):(py35x64_test) c:\Work\Dev\StackOverflow\q047439536>"unzip" -j "a.zip" -d "target" "folder1/folder2/inner.txt"
Archive: a.zip
inflating: target/inner.txt
输出(无-j):(py35x64_test) c:\Work\Dev\StackOverflow\q047439536>"unzip" "a.zip" -d "target" "folder1/folder2/inner.txt"
Archive: a.zip
inflating: target/folder1/folder2/inner.txt
或者,既然你提到了Python
代码.py:import os
from zipfile import ZipFile
def extract_without_folder(arc_name, full_item_name, folder):
with ZipFile(arc_name) as zf:
file_data = zf.read(full_item_name)
with open(os.path.join(folder, os.path.basename(full_item_name)), "wb") as fout:
fout.write(file_data)
if __name__ == "__main__":
extract_without_folder("a.zip", "folder1/folder2/inner.txt", "target")