Linux 带有掩码的解压缩列表无法提取所有匹配的文件

标签 linux archive unzip

我在 Linux 上有一个 zip 存档,每天都会加载大约 20 个名称中带有日期(格式为 yyyymmdd)的文件。 我需要提取所选日期的所有文件,因此我检查它们是否在存档中

unzip -l fileArchive.zip | grep 20160910

结果我看到了 17 个文件,这正是我所期望的:

 32471137  09-12-2016 21:07   TRANSACTIONS_20160910.csv
      181  09-13-2016 21:00   FILE1_D_20160910.CSV
     9345  09-13-2016 21:00   FILE2_D_20160910.CSV
      142  09-13-2016 21:00   FILE3_D_20160910.CSV
  6307637  09-13-2016 21:00   FILE4_D_20160910.CSV
   783975  09-13-2016 21:01   FILE5_D_20160910.CSV
     4812  09-13-2016 21:01   FILE6_D_20160910.CSV
    88306  09-13-2016 21:01   FILE7_D_20160910.CSV
       47  09-13-2016 21:01   G_TEXTE000_D_20160910.CSV
      510  09-13-2016 21:01   FILE9_D_20160910.CSV
   163646  09-13-2016 21:01   FILE10_D_20160910.CSV
       51  09-13-2016 21:02   FILE11_D_20160910.CSV
   158654  09-13-2016 21:02   FILE12_D_20160910.CSV
    31724  09-13-2016 21:02   FILE13_D_20160910.CSV
   269337  09-13-2016 21:02   FILE14_D_20160910.CSV
       89  09-13-2016 21:02   FILE15_D_20160910.CSV
       76  09-13-2016 21:03   FILE16_D_20160910.CSV
       70  09-13-2016 21:01   FILE17_D_20160910.CSV

在下一步中,我想使用带有掩码的 unzip 来提取这些文件,而不是要提取的文件列表:

unzip  fileArchive.zip *20160910* -d /var/tmp/

结果只是提取了一个文件:

Archive:  fileArchive.zip
  inflating: /var/tmp/G_TEXTE000_D_20160910.CSV

这肯定是错误的,因为当我对其他掩码执行相同的操作时,带有掩码的 unzip 命令会提取之前由 unzip -l 列出的所有文件。 幸运的是,我可以通过在列表中给出确切的名称来解压缩所有这些文件:

unzip  fileArchive.zip TRANSACTIONS_20160910.csv FILE1_D_20160910.CSV FILE2_D_20160910.CSV ... FILE17_D_20160910.CSV -d /var/tmp/

所以存档没有损坏。只是有一天,20160910 无法使用掩码解压缩。

您知道可能出了什么问题吗? 问候,

已编辑: 下面是完整的代码(文件名片段被删除),它显示不带引号的掩码适用于对称存档“sk”,而对于此“cz”则无效。

我用引号解压缩“cz”文件 - 工作正常 更改目录并解压缩不带引号的“sk”文件 - 工作正常 更改目录并尝试解压缩不带引号的“cz”文件 - 仅解压缩一个文件。

$ pwd
/root_path/cz/input_data/fileArchive
$ unzip  fileArchive.zip '*20160910*' -d /var/tmp/
Archive:  fileArchive.zip
  inflating: /var/tmp/CZ_C_BAL_D_20160910.csv
  inflating: /var/tmp/CZ_ERNAL_D_20160910.CSV
  inflating: /var/tmp/CZ_A2iMX_D_20160910.CSV
  inflating: /var/tmp/CZ_MENT_D_20160910.CSV
  inflating: /var/tmp/CZ_IER0_D_20160910.CSV
  inflating: /var/tmp/CZ_VIDU_D_20160910.CSV
  inflating: /var/tmp/CZ_ONNEL_D_20160910.CSV
  inflating: /var/tmp/CZ_ENT0_D_20160910.CSV
  inflating: /var/tmp/CZ_E000_D_20160910.CSV
  inflating: /var/tmp/CZ_IST0_D_20160910.CSV
  inflating: /var/tmp/CZ_STE_D_20160910.CSV
  inflating: /var/tmp/CZ_TLOG_D_20160910.CSV
  inflating: /var/tmp/CZ_ENTS_D_20160910.CSV
  inflating: /var/tmp/CZ_ERE0_D_20160910.CSV
  inflating: /var/tmp/CZ_VIDU_D_20160910.CSV
  inflating: /var/tmp/CZ_TEG_D_20160910.CSV
  inflating: /var/tmp/CZ_TEGY_D_20160910.CSV
  inflating: /var/tmp/CZ__ECH_D_20160910.CSV
$ pwd
/root_path/cz/input_data/fileArchive
$ cd /root_path/sk/input_data/fileArchive
$ unzip  fileArchive.zip *20160910* -d /var/tmp/
Archive:  fileArchive.zip
  inflating: /var/tmp/SK_D_20160910.csv
  inflating: /var/tmp/SK_XTERNAL_D_20160910.CSV
  inflating: /var/tmp/SK_X_D_20160910.CSV
  inflating: /var/tmp/SK_MENT_D_20160910.CSV
  inflating: /var/tmp/SK_IER0_D_20160910.CSV
  inflating: /var/tmp/SK_VIDU_D_20160910.CSV
  inflating: /var/tmp/SK_ONNEL_D_20160910.CSV
  inflating: /var/tmp/SK_ENT0_D_20160910.CSV
  inflating: /var/tmp/SK_E000_D_20160910.CSV
  inflating: /var/tmp/SK_IST0_D_20160910.CSV
  inflating: /var/tmp/SK_STE_D_20160910.CSV
  inflating: /var/tmp/SK_TLOG_D_20160910.CSV
  inflating: /var/tmp/SK_ENTS_D_20160910.CSV
  inflating: /var/tmp/SK_ERE0_D_20160910.CSV
  inflating: /var/tmp/SK_VIDU_D_20160910.CSV
  inflating: /var/tmp/SK_TEG_D_20160910.CSV
  inflating: /var/tmp/SK_TEGY_D_20160910.CSV
  inflating: /var/tmp/SK__ECH_D_20160910.CSV
$ cd /root_path/cz/input_data/fileArchive
$ unzip  fileArchive.zip *20160910* -d /var/tmp/
Archive:  fileArchive.zip
replace /var/tmp/CZ_E000_D_20160910.CSV? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
  inflating: /var/tmp/CZ_E000_D_20160910.CSV

这太尴尬了! 我希望掩码引用能够以相同的方式作用于两个文件

最佳答案

unzip(1) 的手册页显示

Be sure to quote any character that might otherwise be interpreted or modified by the operating system, particularly under Unix and VMS.

尝试

unzip fileArchive.zip '*20160910*' -d /var/tmp/

关于Linux 带有掩码的解压缩列表无法提取所有匹配的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39979111/

相关文章:

linux - 如何使用Nautilus连接davs服务器

linux - 直接修改未压缩的 tar 文件

mysql - RDBS 是长期(数年)存储文档的良好解决方案吗?

java - Java 文件夹的 Zip 内容

linux - 如何在 Windows 7 中设置最大 UDP 缓冲区大小

c - realloc:下一个大小无效;内存复制

linux - MIPS 的交叉编译器似乎无法创建有效的程序

objective-c - 用 Swift 和 Objective-C 编写的空项目存档之间的比较

linux - 这个 zip 文件在解压缩时如何向我的控制台打印一条消息?

c# - 使用 C# 解压 .gz 文件