Como rsync arquivos com nome de arquivo maior que um número?

1

Eu tenho algumas centenas de pastas, todas com a mesma estrutura de nomes, ## *, eu preciso fazer backup com o rsync de todas as pastas dentro de 00 para 15_ intervalo para uma unidade e 16_ para 99_ para outra unidade. Como eu posso filtrar cada lista para passar isso para o rsync?.

drwxrwxrwx+  10 user  user    4096 Feb 16  2017 07_MrSmith
drwxrwxrwx+   3 user  user    4096 Mar 24 12:55 10_Other_File
drwxrwxrwx+   4 user  user    4096 Aug 23 14:33 15_New_Interesting_folder
drwxrwxrwx+   9 user  user    4096 Aug 31 17:23 16_SimpleFolderNaming
drwxrwxrwx+   3 user  user    4096 May  8 12:53 17_VeryCurious
drwxrwxrwx+   6 user  user    4096 Mar 28 12:38 17_MantinanVinil
drwxrwxrwx+   3 user  user    4096 Mar 28 11:47 17_AnotherFolderWith_Subfolders

Eu tentei procurar parâmetros do comando 'find', 'xargs' ou 'rsync' que permite comparar subconjuntos com números, mas não consigo encontrar uma solução para isso.

Quando faço:

find -maxdepth 1 -regextype posix-extended -regex '..[0-1][0-5]_*'

para filtrar as pastas dentro do intervalo 00-15 não retorna nada.

    
por Fabman 04.09.2017 / 12:12

1 resposta

1

com zsh :

rsync ... <0-15>_*(/) somewhere
rsync ... <16->_*(/) somewhere-else

Com ksh ou bash -O extglob ou zsh -o kshglob :

rsync ... @(0[0-9]|1[0-5])_* somewhere
rsync ... @(1[6-9]|[2-9][0-9])_* somewhere-else

Ou você poderia fazê-lo em globs separados (embora você veja mensagens de erro de rsync se qualquer uma das glob não corresponder a nenhum arquivo e você possa acabar com os arquivos rsyncing que são chamados literalmente 0[0-9]_* , 1[0-5]_* ...):

rsync ... 0[0-9]_* 1[0-5]_* somewhere
rsync ... 1[6-9]_* [2-9][0-9]_* somewhere-else

(observe que bash e ksh não suportam o qualificador (/) glob para selecionar apenas arquivos do tipo diretório).

POSIXly:

find . ! -name . -prune \( -name '0[0-9]_*' -o -name '1[0-5]_*' \) \
  -type d -exec sh -c 'exec rsync ... "$@" somewhere' sh {} +
find . ! -name . -prune \( -name '1[6-9]_*' -o -name '[2-9][0-9]_*' \) \
  -type d -exec sh -c 'exec rsync ... "$@" somewhere-else' sh {} +
    
por 04.09.2017 / 12:17