根据 zip 文件的创建方式,有时它会直接提取所有文件,有时会将文件提取到子目录中。
如果后者为真,我如何强制unzip命令“忽略”第一级目录?
例子:
cd /tmp
wget http://omeka.org/files/omeka-1.5.1.zip
mkdir omeka
unzip omeka-1.5.1.zip -d omeka/
cd omeka/
ll
Run Code Online (Sandbox Code Playgroud)
我得到的是/tmp/omeka/omeka-1.5.1/:
total 12
drwxr-xr-x 3 root root 4096 2012-05-08 18:44 ./
drwxrwxrwt 6 root root 4096 2012-05-08 18:44 ../
drwxr-xr-x 5 root root 4096 2012-04-20 14:54 omeka-1.5.1/
Run Code Online (Sandbox Code Playgroud)
我想要的是提取到/tmp/omeka/,的文件(上一级,目录结构中不包含版本号)
/tmp/omeka/(files)
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用-j“垃圾路径”选项,但我想保留子目录结构,而不是顶级目录结构。我怎样才能做到这一点?
小智 8
如果您的 zip 文件不包含目录结构或者您不需要保留它,您可以使用以下命令:
cd /tmp
wget http://omeka.org/files/omeka-1.5.1.zip
unzip -j omeka-1.5.1.zip -d omeka
cd omeka
ll
Run Code Online (Sandbox Code Playgroud)
使用FUSE文件系统,允许您浏览目录等档案,例如AVFS。用于cp将文件解压缩到您选择的目录。
mountavfs
cp -Rp ~/.avfs/tmp/omeka-1.5.1.zip\#/omeka-1.5.1 omeka
Run Code Online (Sandbox Code Playgroud)
由于我们假设存档中有一个顶级目录,因此您可以将其缩短为
cp -Rp ~/.avfs/tmp/omeka-1.5.1.zip\#/* omeka
Run Code Online (Sandbox Code Playgroud)