rsync apenas tipos de arquivos específicos em subdiretórios com profundidade máxima fixa

rsync apenas tipos de arquivos específicos em subdiretórios com profundidade máxima fixa

Quero sincronizar todos os arquivos *.sh em exatamente um subdiretório. Eu tentei este cmd, mas todos os arquivos em um diretório são sincronizados em vez de apenas tipos de arquivos específicos.

rsync -vr -n --include="*.sh" --exclude="*/*/" --prune-empty-dirs /source /target

Eu também tentei adicionar um filtro como

--filter="+ *.sh"

mas isso não alterou o resultado. Outro filtro

rsync -vr -n --include="*.sh" --filter="-! *.sh" --exclude="*/*/" --prune-empty-dirs

me dá uma lista vazia. Se eu excluir "*" também excluo "*.sh"... O que há de errado? Obrigado!

A profundidade deve ser uma - o nome do subdiretório não é conhecido. Por exemplo,

home/subdirectory1/subsubdirectory/subsubsubdirectory/file.sh
home/subdirectory1/file1.sh
home/subdirectory2/file2.sh
home/subdirectory3/file

No exemplo acima rsyncdeve começar em home, sincronizar a hierarquia de diretórios e apenas os arquivos file1.shefile2.sh

Responder1

Seus exemplos não parecem corresponder à sua descrição. Eu acho que o que você está dizendo que quer é isso,

  • combine todos os *.sharquivos em um subdiretório desconhecido imediatamente abaixo do seu/home
  • coloque os arquivos no subdiretório desconhecido no destino
  • não inclua /homeno caminho de destino

Olhando de /home, este comando irá combinar todos os arquivos */*.she copiá-los e seus caminhos parciais para o destino. (Remova --dry-runse estiver satisfeito com o resultado pretendido.)

rsync --dry-run -avR /home/./*/*.sh /target

Por exemplo, /home/subdir/file.shserá copiado para/target/subdir/file.sh

informação relacionada