我在 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/