Как я могу искать файлы и заархивировать их в один файл ZIP

Я добавлю немного информации с точки зрения управления памятью, в дополнение к тому, что говорили другие.

1) Основное различие здесь:

const int MAX_BUF = 1000;
char* Buffer = malloc(MAX_BUF);

Вам нужно управлять выделенной памятью вручную, например, free Buffer, когда вы закончите с ней.

2) Во втором случае:

char Buffer[MAX_BUF];

Вам ничего не нужно, чтобы освободить его (или освободить его дважды). Он будет автоматически уничтожен. Следовательно, вы избегаете задачи обработки памяти - это хорошо. Вы должны стараться всегда оценивать, какой подход вам нужен.

Некоторые точки.

  • Поскольку вторая выделена в стеке, первый подход берется также при создании большого массива - поскольку больше памяти обычно доступно в куче .
  • Также, если вы создаете массив с использованием второго подхода, например, в методе, это будет время жизни объекта - вы не сможете использовать этот массив вне этого метода. В то время как с динамическим распределением это не так.
29
задан Sebas 29 March 2015 в 17:50
поделиться

3 ответа

Команда, которую вы используете, будет запускать zip для каждого файла отдельно, попробуйте это:

find . -name <name> -print | zip newZipFile.zip -@

-@ говорит zip читать файлы из ввода. Из man zip (1) ,

-@ списки файлов. Если список файлов указан как -@ [Не в MacOS], zip берет список входных файлов из стандартного ввода, а не из командной строки.

60
ответ дан jpaugh 29 March 2015 в 17:50
поделиться

Вы также можете указать имена в результате выполнения команды поиска:

zip name.zip `find . -name <name> -print`

Это особенность используемой оболочки. Вы можете искать "backticks", чтобы определить, как ваша оболочка справляется с этим.

15
ответ дан jheddings 29 March 2015 в 17:50
поделиться

Ваш ответ близок, но это может сработать лучше:

find -regex 'regex' -exec zip filname.zip {} +

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

12
ответ дан Dan Jones 29 March 2015 в 17:50
поделиться
Другие вопросы по тегам:

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