Estou .tar
ing alguns arquivos com o caminho example/super_user/Output.*
.
O resultado .tar
é assim:
+ example
+ super_user
- Output.zip
- Output.xml
- Output.txt
Mas quero que o arquivo seja o seguinte:
- Output.zip
- Output.xml
- Output.txt
Você sabe como eu posso conseguir isso enquanto ainda estou em outro diretório?
unix
compression
tar
Der Hochstapler
fonte
fonte
Respostas:
O tar preservará a estrutura de arquivos e pastas, então não acho que exista nenhuma maneira de instruir o tar a nivelar a hierarquia no momento da criação.
Uma solução alternativa é alterar temporariamente o diretório, criar o tar e depois voltar - um rápido exemplo abaixo:
fonte
Se o diretório 'exemplo' estiver na raiz do sistema de arquivos, aqui está outra maneira:
isso mudará o diretório para o ponto em que você deseja fazer o tar. A ressalva é que, se houver subdiretórios em / example / super_user, a estrutura de diretórios será preservada para esses subdiretórios.
fonte
/home/u/foo/bar
, trabalhando dir seja/home/b
,tar -C foo/bar -cvf qiz.tar .
funcione bem. Uma ressalva, porém, é que você não pode usar caracteres curinga, ou sejatar -C foo/bar -cvf qiz.tar *.log
,tar -C foo/bar -cvf qiz.tar "*.log"
outar -C foo/bar -cvf qiz.tar "foo/bar/*.log"
não funcionará.-C
várias vezes em um únicotar
comando se precisar adicionar vários arquivos espalhados por vários diretórios, mas ainda assim desejar que o arquivo tar seja simples.Eu postei minha resposta aqui:
https://stackoverflow.com/questions/13924856/unix-tar-do-not-preserve-directory-structure
repost (para pessoas com preguiça)
Isso é feio ... mas funciona ...
Eu tive esse mesmo problema, mas com várias pastas, eu só queria nivelar todos os arquivos. Você pode usar a opção "transformar" para passar uma expressão sed e ... funciona como esperado.
esta é a expressão:
's/.*\///g'
(exclua tudo antes de '/')Este é o comando final:
fonte
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:
Você pode brincar com o achado para limitar a profundidade, selecionar arquivos específicos e muitas outras coisas.
Boa sorte!
fonte
-printf
é um comando não padrão. Muitos deles funcionam apenas com versões específicas do find. Normalmente marcamos aqueles ao responder a uma pergunta sobre Super User (por exemplo, com "-blah é uma extensão Gnu e não funcionará em todos os lugares").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 os links, mas o conteúdo) sejam incluídos no arquivo morto com o nome desejado.
fonte
Se esse é o conteúdo completo do tarball, você pode usar a
--strip-components
opção GNU tar para remover os 2 níveis antes dos arquivos.fonte
--strip-path
mas usá-la não mudará nada.Outra maneira de mudar o diretório temporariamente é colocar os comandos
cd
etar
entre parênteses(
)
:A vantagem disso é que você sempre retornará implicitamente ao diretório original quando o bloqueio estiver concluído. ou seja, não há necessidade de
pushd
..popd
bloquear ou acompanhar para ondecd
voltar.fonte
pushd envia o caminho do diretório atual para a
DIR
pilha e passa para a pasta de conteúdo. Em seguida, você volta ao diretório original usandopopd
.fonte