Мне нужно сделать zip-файл, архивирующий ~ 100 тыс. Файлов из каталога, содержащего ~ 500 тыс. Файлов. Я получаю ошибки "список аргументов слишком длинный", когда я пытаюсь выполнить очевидные команды:
zip archive.zip *pattern*.txt # fails
zip archive.zip `find . -name "*pattern*.txt"` # fails
Один из подходов заключается в использовании опции -@
для подачи списка файлов через stdin:
find . -name "*pattern*.txt" | zip -@ archive.zip
Тем не менее, страница руководства zip
гласит:
Если список файлов указан как - @ [Не в MacOS], zip берет список входных файлов из стандартного ввода, а не из командной строки.
Меня беспокоит "Не на MacOS". Я пошел вперед и попробовал -@
вариант, и, кажется, работает; но я нервничаю из-за того, что он действительно делает правильную работу (архивирование всех файлов без изменений).
Вот мои вопросы:
- Почему бы
-@
не быть в порядке на MacOS? - Существуют ли некоторые версии MacOS/bash/zip, где это предупреждение верно, и другие, где это не так? Является ли это устаревшим предупреждением, и если да, то где находится разделительная линия?
- Каков жизнеспособный подход к этой проблеме без использования
-@
?
Обратите внимание, что приведенное здесь решение zip: слишком длинный список аргументов (всего 80 000 файлов) ; Мне нужно архивировать некоторые, а не все файлы в каталоге.
Я использую Mac OS 10.7.5. Вот некоторая информация о версии:
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
$ zip --version
This is Zip 3.0 (July 5th 2008), by Info-ZIP.
...
Compiled with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00) for Unix (Mac OS X) on Jun 24 2011.