2016-10-11 1 views
2

У меня есть zip-архив на Linux, в который я загружаю каждый день ~ 20 файлов с датой (отформатированной yyyymmdd) в имени. Мне нужно извлечь все файлы из выбранного дня, поэтому я проверяю, если они находятся в архивеLinux unzip list с маской не удается извлечь все соответствующие файлы

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 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 сбой при использовании маски.

Есть ли у вас какие-либо идеи, что может быть неправильным? С уважением,

Отредактировано: Ниже приведен полный код (части имен файлов вырезаны), который показывает, что маска без кавычек работает для симметричного архива «ск», и для этого «CZ» это не ,

распаковать «CZ» файлы с кавычками - отлично работает изменения реж и распаковать файлы «СК» без кавычек - отлично работает изменения реж и попытаться распаковать «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 

Это неловко! я ожидал бы маска цитаты работать на обоих архивах точно так же

+0

Что выход 'Ls -hl/root_path/ск/input_data/fileArchive'? –

+0

Я сделал для обоих dirs: 'ls -hl/root_path/sk/input_data/fileArchive' возвращает' -rwxrwx --- + 1 jd74630 root 1.2G 3 ноя 3 21:36 fileArchive.zip' для cz возвращает '- rwxrwx --- + 1 jd74630 root 4.1G Nov 3 21:36 fileArchive.zip' Интересно, что теперь распаковать маску работает _only_ с кавычками –

+0

В какой-то момент вы случайно распаковали файлы в '/ root_path/sk/input_data/fileArchive'. Позже вы удалили их. –

ответ

2

страница людей для unzip(1) говорит

Обязательно процитировать любой символ, который в противном случае может быть интерпретирован или модифицированный операционной системой, в частности, в рамках Unix и VMS.

Попробуйте

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

Спасибо! ** Это помогло. ** Только странно, что у меня есть другой симметричный архив для других файлов страны. И с этим вторым архивом эта проблема не возникала. Все перечисленные файлы для 20160910 были затем распакованы. –

+0

Раньше вы разархивировали файлы? Без одинарных кавычек оболочка расширит '* 20160910 *' в список файлов. –

+0

Нет файлов, но файлов с одинаковыми именами из симметричного архива в другом месте. Я вставляю вывод в основное поле - здесь слишком много. –

Смежные вопросы