1

Существует ли команда для извлечения набора zip-файлов в другой zip-файл, а не для извлечения всего этого? например:

A.zip имеет (B.zip, C.zip, c_directory, d.txt) Как извлечь B.zip и C.zip без извлечения c_directory или d.txt?

Нам нужно сравнить содержимое в B.zip и C.zip и найти их различия, сравнив их размеры в них.

Спасибо всем.

1 ответ1

0

По словам man unzip:

NAME
   unzip  -  list, test and extract compressed files in a ZIP ar‐
   chive

SYNOPSIS
   unzip   [-Z]   [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]]   file[.zip]
   [file(s) ...]  [-x xfile(s) ...] [-d exdir]


  [file(s)]
          An optional list of archive members  to  be  processed,
          separated  by  spaces.   (VMS  versions  compiled  with
          VMSCLI defined must delimit files with commas  instead.
          See  -v  in OPTIONS below.)  Regular expressions (wild‐
          cards) may be  used  to  match  multiple  members;  see
          above.   Again, be sure to quote expressions that would
          otherwise be expanded or modified by the operating sys‐
          tem.

Другими словами, аргументы, указанные после имени архива, считаются списком файлов, которые вы хотите извлечь:

$ unzip A.zip B.zip C.zip 

Если вы хотите сравнить содержимое двух zip-файлов, вы можете просто перечислить файлы в каждом архиве и сравнить списки. Параметры -lqq приведут к тому, что unzip выведет список файлов в архиве:

 $ unzip -lqq A.zip 
  424  2013-03-24 04:39   B.zip
  424  2013-03-24 04:39   C.zip
  424  2013-03-24 04:39   d.txt

Итак, чтобы сравнить два архива, перечислите файлы в каждом, сохраните в текстовый файл и сравните текстовые файлы:

$ unzip -lqq A.zip | sort > A_files.txt
$ unzip -lqq D.zip | sort > D_files.txt
$ diff A_files.txt D_files.txt | grep '<\|>'
<         0  2013-03-24 04:57   only_in_A.txt
>         0  2013-03-24 04:57   only_in_D.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .