Extrat tar “Não é possível abrir: Nome do arquivo muito longo”

4

Eu fiz um tar com um diretório em uma máquina remota com:

tar -czvf

Eu scp-lo para minha máquina local, onde eu queria descompactá-lo:

tar -xzvf

Mas eu recebo: Cannot open: File name too long

Na minha máquina local no lubuntu 12.04 eu tenho: tar (GNU tar) 1.26 .

A máquina remota não está acessível no momento, vou verificar a versão depois, se necessário.

Gostaria de extrair sem ter que fazer um novo tar, especialmente porque a máquina remota está offline.

E, a propósito, se você sabe uma maneira de fazer um arquivo adequado apesar do nome longo, eu aceito.

    
por mthpvg 20.11.2012 / 11:41

2 respostas

6

tar limita os nomes dos arquivos para 256 bytes (com extensões GNU). Os sistemas de arquivos Linux suportam pelo menos 256 bytes por nome de arquivo. Isso significa que qualquer arquivo compactado por tar pode ser extraído sem erro. Então eu suponho duas causas:

  1. O tarball está corrompido, confira:

    $ tar -tvf tarball.tar
    

    Você verá alguns erros, se houver algum.

  2. Você usa um sistema de arquivos "virtual", como fusecompress ou ecryptfs (com criptografia / criptografia de arquivos seletivos) e seu nome de arquivo é um pouco menor ou igual ao limite do sistema de arquivos. O truque é quando você monta um diretório com o fusecompress (por exemplo) e cria um nome de arquivo foo.bar o sistema de arquivos virtual cria um arquivo chamado foo.bar.gz e compacta-o de forma transparente, mas oculta o nome real do arquivo. E se você criar um arquivo com um nome de 254 bytes, você receberá um erro porque ele tentará acrescentar um sufixo a ele.

    Nesse caso, simplesmente extrair o tarball fora do sistema de arquivos virtual deve ajudar:

    $ sudo mkdir /home/${USER}-temp
    $ sudo chown $USER /home/${USER}-temp
    $ tar -xvf tarball.tar -C /home/${USER}-temp
    

De qualquer forma, tente rastreá-lo para obter mais informações:

$ strace -o tar-strace.log tar -tf tarball.tar
$ ltrace -o tar-ltrace.log tar -tf tarball.tar
    
por 20.11.2012 / 12:13
1

Aqui está minha solução alternativa para salvar os arquivos. Ao extrair tar, adicione estas opções:

  • use --xform ' / sed / expressão / ' para abreviar os nomes longos.
  • use -T file_with_names_list para extrair apenas arquivos problemáticos em vez de todos os arquivos.

Exemplo:

coloque os nomes extensos de arquivos em /tmp/missing.txt primeiro.

tar -x -T /tmp/missing.txt --xform 's/Beethoven-.*\.flac/B.flac/g' -f backup/home.tar

No meu caso, todos os arquivos problemáticos foram numerados em trilhas de áudio com metainformation, então recortar um pouco de nome não pareceu um problema. Talvez seja necessário pensar em uma maneira de restaurar o nome do arquivo original.

    
por 28.10.2015 / 11:58