
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 rsync
deve começar em home, sincronizar a hierarquia de diretórios e apenas os arquivos file1.sh
efile2.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
*.sh
arquivos em um subdiretório desconhecido imediatamente abaixo do seu/home
- coloque os arquivos no subdiretório desconhecido no destino
- não inclua
/home
no caminho de destino
Olhando de /home
, este comando irá combinar todos os arquivos */*.sh
e copiá-los e seus caminhos parciais para o destino. (Remova --dry-run
se estiver satisfeito com o resultado pretendido.)
rsync --dry-run -avR /home/./*/*.sh /target
Por exemplo, /home/subdir/file.sh
será copiado para/target/subdir/file.sh