我有一个文件 myarchive.zip,其中包含许多目录、文件等。假设这个 myarchive.zip 文件位于名为“b”的目录中。好吧,当我使用“unzip myarchive.zip”命令时,系统默认创建一个名为“myarchive”的目录,其中包含 zip 文件的内容。我愿意不是希望系统创建这个“myarchive”目录 - 我只想将内容提取到目录“b”。这可能吗?
我现在所做的只是发出一个“cp”命令,将文件从新创建的目录(在本例中为“myarchive”到“b”)复制到我想要的位置。
答案1
我的版本unzip
有一个-j
选项不创建任何目录。
所以
unzip -j /path/to/file.zip
会将所有文件解压到当前目录中,而不恢复文件中存储的目录结构zip
。
如果您只想从存档中删除一级目录(提取myarchive/dir/file
为dir/file
,而不是file
),您可以使用(除了文件之外bsdtar
还支持文件)及其选项。zip
tar
-s
bsdtar -xf /path/to/file.zip -s'|[^/]*/||'
答案2
看起来这真的很简单bsdtar:
bsdtar --strip-components=1 -xvf file.zip
答案3
接受的答案没有指定如何做,正如您在问题中所说,如果您仍然想提取到特定文件夹而不使用 zip 文件中存储的文件夹路径,您可以以这种方式使用-j
选项 with option -d
:
unzip -j /path/to/file.zip -d other_folder
或针对您的情况
unzip -j myarchive.zip -d b
答案4
假设您已经在该b
目录中:
tar zxvf myarchive.zip --strip-components=1
否则:
tar zxvf b/myarchive.zip --strip-components=1 -C b/