Tenho os seguintes diretórios:
- 1
- 12
- 123
- 1234567
- 1234566
- 1234555
- 121
Quero sincronizar novamente os diretórios com exatamente 7 dígitos no nome. (Seriam 1234567, 1234566 e 1234555 da lista acima).
Isso é o que funciona para mim:
rsync -avu \
--include="[0-9][0-9][0-9][0-9][0-9][0-9][0-9]" \
--exclude='*' \
remote_host:/export/Data/liberty/TestRecords/2025/* \
/export/Data/liberty/TestRecords/2025/
Mas aqui estão meus dois fatos limitantes:
- E se meu nome ficar mais longo? Então seria difícil digitar uma expressão regular tão longa como N vezes "[0-9]". Preciso de uma solução um pouco similar a usar grep com o regex , onde N seria o número de dígitos; isso seria muito útil para mudar sempre que eu precisar.
[0-9]\{N\}
- Minha fonte é um servidor remoto, então seria um pouco mais difícil e custoso executar SSH ou qualquer
find
comando na máquina remota para retornar resultados.
O Regex [0-9]{7}
OR [0-9]\{7\}
NÃO funciona com --include
.
Nota: Eu respondi o seguinte antes de @wobtax editar a pergunta para tornar o item de marcador "Minha fonte é um servidor remoto, então seria um pouco mais difícil e custoso executar SSH ou qualquer comando find na máquina remota para retornar resultados." claramente visível (ele tinha sido previamente escondido recuado em um Bloco de Código), então eu perdi que os arquivos de fonte são armazenados remotamente. Para fazer o que eu sugiro abaixo, você precisaria envolvê-lo em um
ssh
script e executá-lo na máquina remota.A ferramenta padrão do Unix para encontrar arquivos é
find
:então use isso para encontrar seus arquivos e então chame
rsync
o resultado, chamandorsync
defind
:ou canalizando
find
a saída paraxargs
chamarrsync
:Não estou familiarizado o suficiente com
rsync
as opções para preencher awhatever
parte de acordo com suas necessidades, mas espero que seja fácil para você, talvez com um pouco de tentativa e erro, se não ficar imediatamente óbvio.Aqui vai um truque para repetir a
[0-9]
sequência apenas 10 vezes:Com um parâmetro
N
: