Eu quero criar um arquivo tar adequado para extração em /
. Eu criei um diretório de trabalho que representa a raiz do sistema de arquivos, e ele tem todas as coisas que eu quero incluir no tar abaixo, como: etc/rc.d/init.d/glassfish3
, opt/glassfish3/...
e outros diretórios e arquivos em opt/...
.
Quando eu faço tar zcvpf files.tgz *
, ele inclui os diretórios intermediários (como etc
, etc/rc.d
e opt
) no arquivo tar. Então, quando eu extraí-lo em /
em outro sistema, ele tem o comportamento indesejável de mucking com propriedade e permissões nesses diretórios. Eu realmente quero deixar as pessoas sozinhas e não tocá-las.
Então, achei que encontrei uma boa maneira de contornar isso com:
find . -type f -print0 | tar zcvpf files.tgz --null --files-from -
que cria um tar que inclui apenas arquivos. Isso é ótimo, ele só pega os arquivos que eu coloco lá ... exceto que acabei de descobrir que não está pegando diretórios importantes, como:
opt/glassfish3/glassfish/lib/asadmin
que é um diretório vazio (e necessário para o Glassfish3, ou ele irá reclamar).
Como eu posso criar um arquivo tar que pule diretórios intermediários, mas não diretórios finais? Eu tenho a sensação de que algum achado + magic awk pode fazer isso. Não precisa ser um one-liner, a legibilidade é importante. Obrigado.
Editar : eu encontrei isso. Outras / melhores ideias são bem-vindas:
cat <(find . -type f -print0) <(find . -type d -empty -print0) | tar zcvpf files.tgz --null --files-from -