linux zip e tar todos os arquivos com uma extensão específica de forma recursiva, mantendo a estrutura de diretórios

0

Semelhante a esta pergunta e a esta pergunta Eu gostaria de fazer um único arquivo tar compactado (files.tar.gz) que contenha todos os arquivos php em minha webroot e todos os seus subdiretórios, mantendo a estrutura de pastas. Minha webroot é chamada de 'public_html'.

Ainda não experimentei nada, porque não sei por onde começar. A segunda questão que eu vinculei na verdade chega bem perto do que eu estou procurando, mas faz com que cada arquivo encontrado seja um GZ separado, se eu o ler direito.

Na verdade, a natureza monolítica do alcatrão é mais importante para mim do que a compressão do gzip. Eu só quero puxar este arquivo para minha máquina windows onde eu posso pesquisar através dele com as ferramentas que eu estou acostumado.

    
por TecBrat 05.11.2012 / 16:30

1 resposta

4

find -iname '*.php' -print0 | xargs -0 tar -rf php_backup.tar

Isso usa a segunda resposta à qual você vinculou, mas substitui o -c por -r

De man tar:

-c      Create a new archive containing the specified items.
-r      Like -c, but new entries are appended to the archive.  Note that
        this only works on uncompressed archives stored in regular files.
        The -f option is required.

Outra opção seria substituir o -print0 por -exec. Acho que isso será mais eficiente, mas pode ser quebrado se você tiver milhares ou dez de milhares de arquivos.

[Editar]

1) O -print0 e -0 após xargs são necessários apenas se você tiver separadores inconvenientes em seus nomes de arquivos. (leia nomes com espaços). Você pode não precisar disso.

2) Eu verifiquei o comando novamente e testei. find /public_www -name '*.php' -print | xargs alimenta uma única linha para xargs. Assim, o exemplo ao qual você se vinculou se traduz em algo como xargs -0 tar -cf docs.tar *.php e também deve funcionar.

    
por 05.11.2012 / 16:42