como adicionar arquivos de uma pasta para arquivar em vez das próprias pastas?

4

esta não é uma duplicata de criando um arquivo tar sem incluindo o diretório pai

Se eu fizer tar -czf archive directory , o diretório será adicionado ao arquivo. Eu quero adicionar os arquivos da pasta directory não o diretório em si, como?
por favor sugira resposta que não envolva cd ing para directory

isto não é uma duplicata do que está a mostrar:
Eu tenho um diretório chamado somedir com conteúdo como abc , xyz :

ls somedir
abc xyz

Eu quero criar um arquivo que contenha arquivos abc , xyz , não somedir folder

Atualizar : se eu usar o comando tar -C /home/username/dir1/dir2 -cvf temp.tar yourarchive (qual a resposta para a pergunta da qual minha pergunta é chamada de duplicata de)
eu entendo isso:

oqueeuqueroétarczfarchive.tar.gz-Cyourarchive.,euentendoisso(queestápertoosuficientedoqueeuqueria):

o que eu queria era isso (arquivos diretamente, sem pasta):

    
por Edward Torvalds 28.04.2015 / 10:17

3 respostas

7

Use -C :

tar czf archive -C directory .

Isso instrui tar a usar directory como seu diretório de trabalho e arquivar tudo o que estiver no diretório ( . ).

Usar -C é quase equivalente a usar cd ; archive acima é interpretado em relação ao diretório atual quando tar inicia, então tar altera seu diretório de trabalho para directory antes de interpretar . .

Não tenho certeza de como o suporte difundido para tar -C é, mas qualquer distribuição Linux deve suportá-lo.

    
por 28.04.2015 / 10:27
2

tente

tar cvf archive.tar -C somedir $(ls somedir)

onde

  • cvf C reate V erbose (ly) F ile Archive.tar
  • -C somedir irá instruir o tar para usar somedir
  • $(ls somedir ) arquivo de lista no somedir e $( ) passe resultado como argumento

Editar:

Como apontado no comentário, use ls -A (não ls -a ) para listar o dotfile.

    
por 28.04.2015 / 11:07
1

Você pode fazer isso com pax (1) , que é o sucessor posix do tar, mas nunca realmente pegou. Ele pode gravar arquivos tar e fazer a transformação de nome de arquivo desejada:

pax -wzf archive -s '|directory/\?||' directory

Isso se divide em:

  • -w escreve um arquivo (o mesmo que -c para tar)
  • -z compactar arquivo (igual ao tar)
  • -f archive escreve no arquivo archive (igual ao tar)
  • -s '|directory/\?||' substitui nomes de arquivos no arquivo. Substitua a string directory por uma / opcional com a string vazia. O / opcional é necessário, pois o próprio diretório não termina com / , mas todos os outros membros têm / . Isso não precisa ser ancorado ao início da string ( ^ ) porque substitui apenas a primeira correspondência (como sed(1) ) e todos os arquivos começarão com directory/\?

Para ser explícito, você pode adicionar:

  • -x ustar escreve um arquivo tar POSIX

mas esse é o padrão.

Você deve ser capaz de encontrar o pax no seu repositório de pacotes Linux ou BSD. Parece haver um GNU pax, mas não sei o estado disso. O Debian parece ter uma versão BSD do pax.

    
por 28.04.2015 / 11:37

Tags