Слишком длинный список аргументов не является специфичной для 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