Executar tar duas vezes? Primeiro, exclua o Texas e depois apenas extraia o arquivo?
Eu tenho a pasta raiz USA
e as subpastas California
e Texas
. Texas
é uma subpasta excluída, mas possui um arquivo específico que gostaria de incluir no backup de tar. Vamos chamar esse arquivo Austin
.
Como faço isso?
Executar tar duas vezes? Primeiro, exclua o Texas e depois apenas extraia o arquivo?
Eu não sei como fazê-lo convenientemente com o BSD ou o GNU tar. (Inconveniently: não exclua o diretório em si, mas exclua todos os arquivos no diretório, exceto o que você deseja incluir.)
Você pode fazer isso com relativa facilidade com pax , que é o substituto do POSIX para o cpio e o tar. O Pax deve estar disponível em todos os lugares, embora algumas distribuições do Linux não o incluam como parte da instalação padrão.
O Pax gerencia exclusões e renomeia por meio da mesma ferramenta: a opção -s
. Se um arquivo for renomeado para a string vazia, ele será excluído. As opções -s
são processadas em ordem e, depois que um arquivo é correspondido, as opções subseqüentes não são processadas para esse arquivo (a menos que o sufixo g
seja usado). Assim, você pode excluir um arquivo renomeando-o para ele mesmo antes da regra de exclusão que o corresponderia.
pax -w >foo.tar -s '!^USA/Texas/Austin$!&!' -s'!^USA/Texas/.*!!' USA
Encontrou o mesmo requisito que este. Veio aqui para encontrar uma solução, mas não conseguiu uma. De qualquer forma, eu consegui alcançar isso rodando tar duas vezes, então postando aqui.
Primeiro, crie o arquivo tar excluindo a pasta Texas
:
tar cvf foo.tar --exclude=Texas USA/
Em seguida, anexe o arquivo necessário apenas ao arquivo tar criado:
tar vfr foo.tar USA/Texas/Austin/
Desta vez, removemos a opção c
(create tar) e usamos r
(append).
Assuntos de ordem. Não há necessidade de executar o tar duas vezes.
tar cvf dest.tar USA/Texas/Austin --exclude=USA/Texas USA
testado no GNU tar 1.29