Слишком длинный список аргументов не является специфичной для tar
ошибкой. Это ошибка (E2BIG
) системного вызова execve (2) (данная ядром, которая должна накладывать некоторые ограничения на execve
во избежание повреждения памяти). Таким образом, ваша оболочка (которая fork
-s, а затем execve
-s программу /bin/tar
) сообщает об этом сообщении об ошибке.
Может быть трудно увеличить этот лимит (возможно, какой-то sysconf
, я забыл детали). Или перекомпилировать ядро и увеличить ARG_MAX
в его include/uapi/linux/limits.h
GNU tar(1) принимает много интересных опций (поэтому, пожалуйста, прочитайте страницу руководства), в частности:
-T, --files-from = ФАЙЛ
Get names to extract or create from FILE.
Поэтому соберите пути к файлам, которые будут заархивированы в каком-то (например, временном) файле, затем передайте его с -T
и вы не получите никаких ограничений.
Тем не менее, команда tar
имеет много интересных функций, и вы можете использовать их, чтобы получить команду разумного размера.
Смотрите также find(1) и xargs(1). Также рассмотрим dar или afio (как альтернативу tar
) или rsync
Вы можете использовать GNU cp(1) как cp -va sourcedir destdir