Usando o Rsync para copiar apenas um tipo de arquivo

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”.

 

One thought on “Usando o Rsync para copiar apenas um tipo de arquivo”

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *