【问题标题】:linux unzip excluding everything in the folder and underneathlinux unzip 不包括文件夹和下面的所有内容
【发布时间】:2013-10-29 17:51:46
【问题描述】:

您好,我必须解压缩一个可能有目录的文件,并且我想排除该目录中的所有内容,我尝试了很多选项并查看了这里,但似乎没有找到任何好的解决方案。

这些是 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

感谢您的帮助。

【问题讨论】:

    标签: linux unzip


    【解决方案1】:

    您需要引用排除模式,以便将其传递给unzip。否则在传递给unzip之前会被shell扩展。

    试试:

    unzip patch2.zip -x "EXCLUDE/*"
    

    【讨论】:

    • +1 作为答案,因为它接近 OP 的问题。我自己的只是一个“值得了解”的替代方案 ^^(现在鲜为人知,而它在早期的 linux 时代更为出名)
    • 感谢这完美的工作。你能解释一下“它被传递给解压缩是什么意思。否则它会在被传递给解压缩之前被shell扩展”。
    • @Ravi 了解Globbing,这是 shell 将通配符模式转换为文件名的时候。例如,当您运行 echo * 时,shell “扩展”* 到文件名列表中,例如file1file2 等在执行 echo 之前。因此,echo * 变为 echo file1 file2echo 程序永远不会看到通配符,它​​只会看到参数 file1file2。但是,如果您引用模式 echo "*",shell 将不会执行此扩展,并且模式将作为参数传递给程序,程序可以根据自己的选择进行解释。
    • 要指定多个排除项,请使用以下语法:-x "pattern 1" "pattern 2" ...,不要使用 -x "pattern 1" -x "pattern 2",否则使用第 2 个-x 将被视为匹配模式,会引发警告消息。我在谷歌上搜索过,但发现这个问题很少被提及,所以我想把这些信息分享给有需要的人。
    【解决方案2】:

    @dogbane 的回答是对的。

    但我仍然添加另一个 [我希望] 有趣的选项,就像您在 linux 上一样:

    mc  
    

    (又名:午夜指挥官)

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

    mc 非常灵活且易于使用,尤其是对于 tar/untar/zip/move/delete/rename 文件...(在 Windows 上,等效的是 TotalCommander,我经常使用它的“同步”选项保持备份和来源同步)。它使您可以像解压缩一样导航存档(尝试将实际解压缩最小化为“导航”部分,这样您就不会解压缩两次)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多