Linux解压缩时排除文件夹及其子文件夹中的所有内容

18

嗨,我需要解压一个可能带有目录的文件,并且我想排除该目录中的所有内容,我尝试了很多选项并在这里查找,但似乎没有找到好的解决方案。

以下是zip文件的内容: 请注意,EXCLUDE文件夹的深度未知,但我们必须排除其中的所有内容。

    $unzip -l patch2.zip
Archive:  patch2.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2013-10-29 17:42   EXCLUDE/
        0  2013-10-29 17:24   EXCLUDE/inner/
        0  2013-10-29 17:24   EXCLUDE/inner/inner1.txt
        0  2013-10-29 15:45   EXCLUDE/file.txt
        0  2013-10-29 15:44   patch.jar
        0  2013-10-29 15:44   system.properties
---------                     -------
        0                     6 files

我尝试了这个命令,它只能提取其中的文件,而不能提取文件夹及其内容:

$unzip -l patch2.zip -x EXCLUDE/*
Archive:  patch2.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2013-10-29 17:42   EXCLUDE/
        0  2013-10-29 17:24   EXCLUDE/inner/
        0  2013-10-29 17:24   EXCLUDE/inner/inner1.txt
        0  2013-10-29 15:44   patch.jar
        0  2013-10-29 15:44   system.properties
---------                     -------
        0                     5 files

感谢您的帮助。

2个回答

30

你需要引用排除模式,这样才能将其传递给unzip。否则,在传递到unzip之前,它将被Shell扩展。

尝试使用:

unzip patch2.zip -x "EXCLUDE/*"

1
+1 是对问题的回答,非常接近原始提问者的问题。我的回答只是一个“好知道”的替代方案 ^^(现在已经不太知名了,尽管在早期的Linux时代它曾经非常有名)。 - Olivier Dulac
谢谢,这个完美地解决了。您能否解释一下“如果它被传递给unzip,则会被解压缩。否则,在传递给unzip之前,它将由shell扩展。”的意思? - Ravi
1
@Ravi 了解一下Globbing。这是指当shell将通配符模式转换为文件名时所发生的过程。例如,当你运行echo *时,shell会将*“扩展”成一个文件名列表,如file1file2等,然后再执行echo。因此,echo *变成了echo file1 file2echo程序从未看到通配符,它只看到了参数file1file2。但是,如果你将模式用引号括起来,echo "*", shell就不会执行这个扩展操作,而是将模式作为一个参数传递给程序,由程序自己来解释。 - dogbane
5
若要指定多个排除模式,请使用以下语法:-x "模式1" "模式2" ...,不要使用 -x "模式1" -x "模式2" 的方式,否则第二个 -x 将被视为匹配模式,从而导致出现警告信息。我已经谷歌搜索了,发现这个问题很少被提及,因此我想分享这些信息给那些需要的人。 - Scott Chu

1

@dogbane的回答是正确的。

但我还想再添加一个有趣的选项 [希望],因为你正在使用Linux:

mc  

(又名:午夜指挥官)

启动它,然后:在右侧面板上,导航到您想要将文件放置的位置,在左侧面板上,导航到ZIP文件的“内部”,并在第一级别选择+复制所需的内容(例如,全选,并取消选择EXCLUDE文件夹)

mc非常灵活且易于使用,特别是对于tar / untar / zip / move / delete / rename文件...(在Windows上,相当于TotalCommander,我经常使用其“同步”选项来保持备份和原始文件同步)。它允许您像解压缩文件一样浏览存档(尝试将实际解压缩最小化为仅“导航”部分,以便不会重复解压缩它们)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接