Исключает определенные файлы из всех подкаталогов при создании zip-файла.

Исключает определенные файлы из всех подкаталогов при создании zip-файла.

Я хочу исключить все файлы .zip во всех подкаталогах родительской папки, которую я архивирую, но это не работает. Я проверил страницы man zip,этотиэтотвопросы без успеха.

Я пытался:

zip -q -r FILE.zip * -x \*.zip
zip -q -r FILE.zip * -x\*.zip
zip -q -r FILE.zip * -x */\.zip
zip -q -r FILE.zip * -x \*.zip
zip -q -r FILE.zip * -x \*.zip\*
zip -q -r FILE.zip * -x*.zip

и я по-прежнему получаю все включенные zip-файлы (кроме того, который находится в родительской папке, созданной с помощью этой команды ранее).

EDIT: Проблема была в том, что у меня уже был FILE.zip в папке, которая включала несколько zip-файлов. zipКомандаобновлениявместосоздаетновый сжатый файл, если файл, который он пытается создать, уже существует, даже если вы не указали опцию -u.

решение1

Вам нужно заключить в кавычки шаблон исключения, как вы уже пытались сделать; первый вариант должен действительно работать, даже если есть «более хорошее» решение.

Но давайте рассмотрим упрощенный пример для работы. Я создал несколько каталогов с файлами с расширениями .fooи :.bar

Здесь я запускаю findвывод списка моего тестового каталога — он показывает все файлы и каталоги:

$ find
.
./1.bar
./1.foo
./sub1
./sub1/sub2
./sub1/sub2/1.bar
./sub1/sub2/1.foo
./sub1/1.foo
./sub1/1.bar

Теперь мы можем просто посмотреть, что работает
(мы убираем выходной файл, он не имеет значения для сопоставления).

Упаковка всех файлов:

$ zip -r /tmp/out.zip *          
  adding: 1.bar (stored 0%)
  adding: 1.foo (stored 0%)
  adding: sub1/ (stored 0%)
  adding: sub1/sub2/ (stored 0%)
  adding: sub1/sub2/1.bar (stored 0%)
  adding: sub1/sub2/1.foo (stored 0%)
  adding: sub1/1.foo (stored 0%)
  adding: sub1/1.bar (stored 0%)

Упаковка без .fooфайлов:

$ rm /tmp/out.zip
$ zip -r /tmp/out.zip * -x '*.foo'
  adding: 1.bar (stored 0%)
  adding: sub1/ (stored 0%)
  adding: sub1/sub2/ (stored 0%)
  adding: sub1/sub2/1.bar (stored 0%)
  adding: sub1/1.bar (stored 0%)

Работает!
Пробуем еще раз с вашим первым шаблоном:

$ rm /tmp/out.zip
$ zip -r /tmp/out.zip * -x \*.foo 
  adding: 1.bar (stored 0%)
  adding: sub1/ (stored 0%)
  adding: sub1/sub2/ (stored 0%)
  adding: sub1/sub2/1.bar (stored 0%)
  adding: sub1/1.bar (stored 0%)

Тоже работает!

Итак... внимательно посмотрите, что вы там на самом деле проделали.

Сначала вы можете убрать -qопцию "тихий", скрыв стандартные сообщения, показанные в моих примерах.
В качестве следующего шага добавьте -vопцию "подробный", чтобы увидеть больше подробностей - возможно, слишком много, но, возможно, вы сможете заметить что-то интересное.


Из комментариев я вижу, что удаление -qуже помогло;

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

Отman zip:

Command format.  The basic command format is

               zip options archive inpath inpath ...

        where archive is a new or existing zip archive and inpath is a directory or
        file path optionally including wildcards.  When given the name of an exist‐
        ing zip archive, zip will replace identically named entries in the zip  ar‐
        chive (matching the relative names as stored in the archive) or add entries
        for new names.

Связанный контент