Suponhamos que você tenha uma estrutura de diretórios contendo milhares de arquivos de diversos tipos e você precisa copiar esta estrutura para algum outro local, mas contendo apenas um tipo especifico de arquivo. Um método prático de se fazer isso é usando os filtros “include” e “exclude” do Rsync.
No exemplo abaixo eu estou copiando todos arquivos “pdf” e “PDF” da minha pasta de Documentos para a pasta Livros, mas mantendo a estrutura original.
$ rsync -HAXEvazu --prune-empty-dirs \ --include '*/' --include '*.pdf' \ --include '*.PDF' --exclude '*' \ Documentos/ Livros
A diferença disso para o tradicional comando “cp” é que ao invés de copiar tudo para dentro de “Livros”, as pastas originais serão preservadas. Ou seja, se eu tiver um arquivo em Documentos/sagas/minhasaga.pdf ele será copiado exatamente para Livros/sagas/minhasaga.pdf.
Para facilitar o entendimento e poder adaptar a linha de comando a sua necessidade esteja atento aos parâmetros:
- -HAXEvazu – Conjunto de parâmetros para certificar de que todos os atributos serão transferidos exatamente como estão na origem (talvez você não precise mexer nisso, mas se quiser consulte o manual do rsync para entender cada um deles);
- –prune-empty-dirs – Não copia diretórios que acabariam vazios por não possuírem os arquivos desejados
- — include ‘*/’ – Isso é uma gambiarra para forçar o Rsync a varrer todos os subdiretórios
- –include ‘*.pdf’ – Este é o tipo de arquivo que eu quero copiar. Veja que eu repeti este filtro com o ‘*.PDF’. Se você usa Linux há muito tempo sabe que os arquivos são case-sensitive (MAIÚSCULAS são diferentes de minúsculas); Note ainda que você pode incluir outros tipos de arquivos apenas adicionando outros “–include ‘tipo'”;
- –exclude ‘*’ – Todos os outros arquivos serão descartados da cópia;
- Documentos/ – Pasta de origem onde estão os arquivos a serem copiados . Esteja atento a “/” no final da pasta. Sem ela ao invés de você encontrar “Livros/sagas/minhasaga.pdf” você encontrará Livros/Documentos/sagas/minhasaga.pdf
- Livros – é a pasta de destino da cópia
Bônus
Caso você queira mover os arquivos ao invés de copiar adicione o parâmetro “–remove-source-files” que irá remover os arquivos de “Documentos” assim que tiverem sido copiados para “Livros”.
Boa tarde.
Shoow de bola sua dica, salvou o guarda hoje aqui velho.
Abraço