将文件解压缩到目标目录中?


4

我有一个调用的文件All CRGs.zip,我想将其内容解压缩到一个名为data(已经存在且有其他文件)的目录中。

这可能吗?我正在研究OSX。

我试过了:

$ unzip "All CRGs.zip" -d data/

但这解压缩data/All CRGs了我想要的一切。我希望一切都能直接进入data

这可能吗?


我确定双击它会更容易,让它提取到默认位置[通常在.zip旁边],然后将内容拖到新位置。
Tetsujin 2015年

是的,但这不是我的问题:)
理查德

Answers:


3

您可以重新创建包括-Folder 在内的完整文件夹结构,All CRGs也可以使用-flag为unzip-command省略ZIP文件中的所有文件夹-j

问题是ZIP文件是使用All CRGs-Folder作为顶层创建的zip "All CRGs.zip" "All CRGs"。正确的方法将是zip "All CRGs.zip" "All CRGs/*"这将创建了里面的所有文件和文件夹的ZIP -归档All CRGs-folder 没有周围的文件夹。

因此,通过保留文件夹结构来仅提取文件的唯一方法是这样的:

unzip "All CRGs.zip" -d data/ && mv "data/All CRGs/*" "data/" && rmdir "data/All CRGs"

它将解压缩整个文件夹,然后将文件夹的内容向上移动一级,最后删除(现在为空)“所有CRG”文件夹。


“正确的方式本来......”与我的期望不符。我尝试使用该语法创建一个zip文件,我得到“名称不匹配”。如果我All CRGs/*取出引号,则文件会添加到zip中,但会显示父目录。
杰森R.库姆斯

自问题得到解答以来,至少有2个新版本的OS-X(macOS)。所以可能会发生变化。你在做什么版本的macOS?
heiglandreas

好点子。10.12.5是我在评论时使用的最新版本和版本。
杰森R.库姆斯

mv命令不会移动隐藏文件。需要额外mv "data/All CRGs/.*" "data/"的。
Kinjal Dixit

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

可以在没有使用touch的zip文件的情况下演示此技术:

$ mkdir data
$ ln -s . data/subdir     
$ touch data/subdir/foo.txt
$ ls data
foo.txt subdir

您也可以使用此技巧将某些文件或文件夹提取到备用文件夹:

ln -s /tmp data/subdir2

然后,提取到的存档中的任何内容都subdir2将显示在/tmp

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.