.tar arquivos sem estrutura de diretórios

27

Estou .tar ing alguns arquivos com o caminho example/super_user/Output.* .

O .tar resultante é assim:

+ example
    + super_user
          - Output.zip
          - Output.xml
          - Output.txt

Mas eu quero que o arquivo seja como o seguinte:

- Output.zip
- Output.xml
- Output.txt

Você sabe como posso conseguir isso enquanto ainda está em outro diretório?

    
por Der Hochstapler 18.04.2011 / 08:13

8 respostas

10

O tar preservará a estrutura de arquivos e pastas, portanto, não há como instruir o tar a nivelar a hierarquia no momento da criação.

Uma alternativa é alterar temporariamente o diretório, criar o tar e voltar - um exemplo rápido abaixo:

cd example/super_user && tar -cvf ../../result.tar Output.* && cd ../..
    
por 18.04.2011 / 18:45
21

Se o diretório 'exemplo' estiver na raiz do sistema de arquivos, aqui está outra maneira:

tar -C /example/super_user -cvf result.tar .

isto irá mudar o diretório para o ponto que você quer fazer o tar. A ressalva é que, se houver subdiretórios em / example / super_user, a estrutura do diretório será preservada para esses subdiretórios.

    
por 24.05.2012 / 10:59
9

Eu postei minha resposta aqui:

link

repost (para pessoas preguiçosas)

Isso é feio ... mas funciona ...

Eu tive esse mesmo problema, mas com várias pastas, eu só queria aplainar todos os arquivos. Você pode usar a opção "transformar" para passar uma expressão sed e ... ela funciona como esperado.

esta é a expressão:

's/.*\///g' (exclua tudo antes de '/')

Este é o comando final:

tar --transform 's/.*\///g' -zcvf tarballName.tgz */*/*.info
por 19.09.2014 / 13:17
6

Para criar um tar (ARCHIVE.tar) com todos os arquivos de um diretório (DIR), sem nenhuma informação de diretório pai (nem mesmo ./), você pode usar algo como:

find "DIR" -type f -printf "%f\n" | xargs tar cf ARCHIVE.tar -C "DIR"

Você pode jogar com a localização para limitar a profundidade, selecionar arquivos específicos e muitas outras coisas.

Boa sorte!

    
por 11.12.2012 / 15:56
3

Eu criei um diretório temporário. E no diretório, criou links simbólicos para todos os arquivos para os arquivos a serem incluídos. Então eu fiz tar -h-C. para que todos os arquivos (não links, mas seu conteúdo) sejam incluídos no arquivo com o nome desejado.

    
por 20.05.2016 / 07:41
1

Se esses são os conteúdos inteiros do tarball, então você pode usar a opção --strip-components do GNU tar para remover os 2 níveis antes dos arquivos.

    
por 18.04.2011 / 08:27
1

Outra maneira de alterar temporariamente o diretório é colocar os comandos cd e tar entre parênteses ( ) :

(cd example/super_user; tar -cvf ../../result.tar *)

A vantagem disso é que você sempre irá aparecer implicitamente de volta ao diretório original quando o bloco estiver pronto. ou seja, não há necessidade de pushd .. popd bloquear ou manter o controle de para onde cd retornou.

    
por 29.09.2016 / 03:39
0
pushd example/super_user
tar -cf output.tar Output.*
popd

pushd empurra o caminho do diretório atual para a pilha DIR e move para a pasta de conteúdo. Em seguida, você volta para o diretório original usando popd .

    
por 04.07.2015 / 07:32