Исключает определенные файлы из всех подкаталогов при создании 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 ответ
Вам нужно процитировать шаблон исключения, как вы уже пытались это сделать; Первый действительно должен работать, даже если есть "более приятное" решение.
Но давайте посмотрим на упрощенный пример для работы; Я создал несколько каталогов с файлами с .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.