Eu quero tar o diretório X não incluindo seus pais

9
tar cvf /var/lib/backup/sample.tar /home/user/.project

No entanto, quando extraio, recebo seus pais também

/backup/
  - /home/
     - /user/
        - .project/

Esse comando tar funciona porque não inclui mais nada em seus pais (outras pastas em, userpor exemplo).

Eu quero fazer isso programaticamente, portanto, alterar o diretório de trabalho atual para /home/user/não é realmente uma opção. É possível fazer isso?

Usuário007
fonte

Respostas:

17

Você pode usar a -Copção de mudar para o /home/userdiretório antes de tarar ou usar --strip-components 2na extração.

tar cvfC /var/lib/backup/sample.tar /home/user .project
#                              Note the space ^
tar cvf /var/lib/backup/sample.tar /home/user/.project
tar Cxf /backup /var/lib/backup/sample.tar --strip-components 2
Kevin
fonte
11
+1 legal .. Acabei de encontrar o -Cinterruptor quando estava olhando a página de manual , mas não conseguia entender o significado .. parecia-me mais como se fosse usado durante o desarme. Aprendeu algo novo.
Levon
@ Kevin Obrigado. A opção C funciona perfeitamente. Obrigado!
User007
2
Eu não conseguia fazê-lo funcionar assim. De acordo com a leitura gnu.org/software/tar/manual/tar.html#SEC118 , obtive sucesso com o seguinte formato: tar cvf /var/lib/backup/sample.tar -C / home / user .project
Aivar
2

Eu acho que se você estiver cdno diretório de nível superior em que deseja criar o tararquivo, não deverá ter esse problema. Ou seja,

cdpara usere para tarcima .project.. você pode especificar o destino para o arquivo tar no /var/... como antes.

Ou há uma razão que você não quer / não pode cda user?

Levon
fonte
Sim. Essa seria uma solução. Obrigado. Mas espero que exista uma maneira melhor? Quero lidar com esse aliado programático e não quero emitir os.chdir(base_dir)meu código o tempo todo :) por isso seria bom se houvesse uma maneira de sair disso. Graças
User007
@ User007 Ah .. ok, entendi. Você pode atualizar sua pergunta para incluir esse requisito. ID de usuário agradável pela maneira :)
Levon
Obrigado. Sim. Acabei de atualizar minha pergunta. Ah, é para esconder minha identidade ...
User007
11
@ User007 amo a parte 007 .. e parece que você está trabalhando em Python também (que é outro de meus favoritos)
Levon
:) Sim. Tudo bem, nosso amigo Kevinme ajudou com o comando certo. Então eu vou dar a ele o sinal. Mas eu votei em você. Obrigado!
User007