ZIP не архивирует скрытый файл под HOME - PullRequest
3 голосов
/ 15 июля 2011

Вот структура каталогов папки, которую я пытаюсь заархивировать:

DIR STRUCTURE

HOME
HOME/.abc
HOME/FIRST
HOME/FIRST/.def

Я использую simlpe $PATCH/zip -r -l -x "bac*" abc.zip HOME/*

Одна интересная вещь, которую я заметил, это то, что она пропускает скрытую папку прямо под HOME, и она заархивирует папку под FIRST. Что мне здесь не хватает? Это побочный эффект вариантов, которые я выбираю? Пожалуйста, помогите спасибо заранее.

Ответы [ 2 ]

9 голосов
/ 26 ноября 2012
zip archiveName -r .* -x "../*"

Трюк с использованием. * И исключая ../*

8 голосов
/ 15 июля 2011

* не интерпретируется утилитой zip, а расширяется оболочкой. Перед запуском утилиты zip * заменяется на список разделенных пробелами всех не скрытых файлов или каталогов.

Вы можете доказать это, заменив $PATCH/zip на echo, который покажет аргументы, которые фактически передаются программе после искажения оболочки.


Если вы установите переменную окружения GLOBIGNORE в .:.., bash не только отключит сопоставление . и .., но также имеет приятный эффект автоматического включения 'dotglob', который соответствует другим скрытые файлы без необходимости .*, так что вы можете просто использовать * для всего.

Например, это должно решить вашу проблему:

GLOBIGNORE=.:..; $PATCH/zip -r -l -x "bac*" abc.zip HOME/*; unset GLOBIGNORE

Обратите внимание, что вы не можете сделать это коротким путем или одной командой:

GLOBIGNORE=.:.. $PATCH/zip -r -l -x "bac*" abc.zip HOME/*

Кажется, что bash не замечает этого до следующей команды.

...