Lista de argumentos muito longa não é um erro específico de tar
. É um erro ( E2BIG
) do execve (2) syscall (dado pelo kernel, que tem que colocar algumas limitações em execve
para evitar estragar a memória). Portanto, seu shell (que fork
-s, em seguida, execve
-s o programa /bin/tar
) informa essa mensagem de erro.
Pode ser difícil aumentar esse limite (talvez alguns sysconf
, eu esqueci os detalhes). Ou recompile seu kernel e aumente o ARG_MAX
em seu include/uapi/linux/limits.h
.
O GNU tar (1) aceita muitas opções interessantes (por favor, leia o manual página), em especial:
-T, --files-from=FILE
Get names to extract or create from FILE.
Portanto, colete os caminhos de arquivo a serem arquivados em algum arquivo (por exemplo, temporário) e, em seguida, passe-o com -T
e você não terá limitações.
No entanto, o comando tar
tem muitos recursos interessantes e você pode usá-los para ter um comando de tamanho razoável.
Veja também encontre (1) e xargs(1) . Considere também dar ou afio (como altenatives a tar
) ou rsync
Você pode usar o GNU cp (1) como cp -va sourcedir destdir