Acho que consegui fazer isso juntando o que foi dito aqui com alguma experimentação.
tar -cvf test.tar --exclude-from=exclude --directory="/root/test" .
Onde excluir é um arquivo com:
dir3
dir4
Estrutura de diretórios simplificada:
/root/test
/root/test/dir1
/root/test/dir2
/root/test/dir3
/root/test/dir4
Eu quero tar / root / test para que quando eu extraio o arquivo eu recebo dir1 e dir2. Eu quero excluir dir3 e dir4 e, possivelmente, outros arquivos e subdiretórios, dependendo da aplicação específica do comando.
Eu percebo que há muitos exemplos de tar e snippets na rede, mas não consigo obter um exemplo específico ou combinar os disponíveis on-line para fazer isso funcionar como acima. Qualquer ajuda seria muito apreciada.
Que tal
cd /
tar cvf /tmp/test.tar --exclude="./root/test/dir[34]" ./root/test
se você tiver um número limitado de pastas que deseja tar, basta fazer
tar -C /root/test -cf arch.tar dir1 dir2
root@pinkpony:~# ls /root/test/
dir1 dir2 dir3
root@pinkpony:~# pwd
/root
root@pinkpony:~# tar -C /root/test -cf arch.tar dir1 dir2
root@pinkpony:~# tar tf arch.tar
dir1/
dir2/
EDIT (torne o código incluído no comentário legível):
se você tiver regras complexas para criar a lista de diretórios que deseja tar, talvez queira iniciar o script:
root@pinkpony:~# (cd /root/test/ ; ls |grep -E '^dir(1|2)$' | xargs tar cf /tmp/blah.tar )
root@pinkpony:~# tar tf /tmp/blah.tar
dir1/
dir2/
você pode usar o que você precisar, em vez daquela coisa idiota, apenas um exemplo; xargs é a parte que eu quero apontar para sua atenção
FWIW você também pode especificar um arquivo para lista exclui para uma lista mais longa de arquivos ou diretórios. É mais fácil do que ajustar uma longa linha de comando.
Confira mycrpt
para um método de criptografia rápido e seguro também. Desculpe, um pouco OT.