Existe algum limite no número de nome de arquivo que podemos passar no tar

3

Estou criando um tar e o descompacte em outro local usando:

$ tar -C sourcedir -cf - . | tar -C targetdir -xpf -

mas isso não é assim
Erro eu estou recebendo é: Argument list too long - tar , quando eu estou reduzindo o número de arquivos, quero dizer fazê-lo em lotes de arquivos (como 1000 arquivos de cada vez) que funciona.
Outro ponto que notei:
se os nomes de arquivos são menores do que funciona bem.

Eu não tenho certeza o que exatamente está limitando isso? por favor, dê sugestões.

    
por ritzz.soni 01.07.2015 / 13:15

1 resposta

6

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

    
por 01.07.2015 / 15:50

Tags