Исключает определенные файлы из всех подкаталогов при создании 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-файлы (кроме того в родительской папке, сгенерированной с этой командой прежде).

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

1
задан 13 April 2017 в 15:24

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.
2
ответ дан 7 December 2019 в 14:07

Другие вопросы по тегам:

Похожие вопросы: