将文件解压到目标目录?

将文件解压到目标目录?

我有一个名为的文件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 CRGsdata/data/All CRGs.zipunzipdata/All CRGs/file.datdata/./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在覆盖之前,它会提示您是否出现任何名称冲突。

相关内容