Я добавлю немного информации с точки зрения управления памятью, в дополнение к тому, что говорили другие.
1) Основное различие здесь:
const int MAX_BUF = 1000;
char* Buffer = malloc(MAX_BUF);
Вам нужно управлять выделенной памятью вручную, например, free Buffer
, когда вы закончите с ней.
2) Во втором случае:
char Buffer[MAX_BUF];
Вам ничего не нужно, чтобы освободить его (или освободить его дважды). Он будет автоматически уничтожен. Следовательно, вы избегаете задачи обработки памяти - это хорошо. Вы должны стараться всегда оценивать, какой подход вам нужен.
Некоторые точки.
Команда, которую вы используете, будет запускать zip для каждого файла отдельно, попробуйте это:
find . -name <name> -print | zip newZipFile.zip -@
-@
говорит zip читать файлы из ввода. Из man zip (1) ,
-@
списки файлов. Если список файлов указан как-@
[Не в MacOS], zip берет список входных файлов из стандартного ввода, а не из командной строки.
Вы также можете указать имена в результате выполнения команды поиска:
zip name.zip `find . -name <name> -print`
Это особенность используемой оболочки. Вы можете искать "backticks", чтобы определить, как ваша оболочка справляется с этим.
Ваш ответ близок, но это может сработать лучше:
find -regex 'regex' -exec zip filname.zip {} +
Это поместит все соответствующие файлы в один zip-файл с именем filename.zip. Вам не нужно беспокоиться о специальных символах в имени файла (например, обрыв строки), что вы бы сделали, если бы передали результаты.