我有一个名为的文件All CRGs.zip
,我想将其内容解压到名为的目录中data
(该目录已经存在并且包含一些其他文件)。
这可能吗?我正在使用 OSX。
我试过了:
$ unzip "All CRGs.zip" -d data/
但这会将所有内容解压到 中,data/All CRGs
这不是我想要的。我希望所有内容直接进入data
。
这可能吗?
答案1
您可以重新创建完全的文件夹结构包括All CRGs
-Folder 或者你可以省略全部-j
通过使用unzip 命令的 -flag,可以解压缩 ZIP 文件内的文件夹。
问题在于,ZIP 文件是使用 -FolderAll CRGs
作为顶层创建的,例如zip "All CRGs.zip" "All CRGs"
。正确的方法是创建一个包含-folderzip "All CRGs.zip" "All CRGs/*"
内所有文件和文件夹的 ZIP 存档All CRGs
没有周围的文件夹。
因此,通过保留文件夹结构来提取文件的唯一方法是这样的:
unzip "All CRGs.zip" -d data/ && mv "data/All CRGs/*" "data/" && rmdir "data/All CRGs"
它将解压整个文件夹,然后将文件夹的内容上移一级,最后删除(现在为空的)“所有 CRG”文件夹。
答案2
由于您知道 zip 文件包含不需要的顶级文件夹,并且您知道该顶级文件夹的名称,因此您可以使用符号链接使该文件夹的所有内容出现在父级中,如下所示:
ln -s . 'data/All CRGs'
unzip 'All CRGs.zip' -d data
该步骤导致创建ln
文件夹,链接到当前目录(相对于),即。然后,当您从中提取文件并且命令尝试创建时,该文件将被创建为。data/All CRGs
data/
data/
All CRGs.zip
unzip
data/All CRGs/file.dat
data/./file.dat
无需 zip 文件,即可使用 touch 演示此技术:
$ mkdir data
$ ln -s . data/subdir
$ touch data/subdir/foo.txt
$ ls data
foo.txt subdir
您也可以使用此技巧将某些文件或文件夹提取到备用文件夹中:
ln -s /tmp data/subdir2
然后,档案中提取的所有内容subdir2
都将出现在中/tmp
。
答案3
您可以使用柯卡,在 Mac 上免费。单击 ZIP 并选择要解压到的目录
答案4
MacOS unzip 命令的默认行为是将文件解压缩到当前目录中。来自man unzip
:
默认行为(无选项)是将指定 ZIP 存档中的所有文件提取到当前目录(及其下面的子目录)中。
因此,如果您cd data
运行unzip "All CRGs.zip"
zip 文件,则该文件的内容将被提取到data
文件夹中。Unzip
在覆盖之前,它会提示您是否出现任何名称冲突。