Estou tentando excluir o #recycle
diretório com rsync:
$ rsync -Hauv -h -P --exclude '#recycle/' --exclude @eaDir/ --exclude '.DS_Store*' --exclude desktop.ini user1@src_server:/volume2/Extension_1 /destination/dir/
receiving incremental file list
Extension_1/#recycle/subDir1/subDir2/
Extension_1/#recycle/subDir1/subDir2/BigVideo.mov
39.23G 82% 36.40MB/s 0:03:44 ^C
$
(Eu também tentei citar .DS_Store*
e remover a --log-file
opção, mas eles não fizeram diferença.)
Estou usando a rsync
versão 3.1.2 protocol version 31
no CentOS 7.9 com a bash
versão 4.2.46(2)-release
.
Para ser mais específico, escrevi um script bem pequeno com uma variável que contém a lista de exclusão
$ rsyncExclusionOptions=$(printf -- "--exclude %s " "'#recycle/'" @eaDir/ "'.DS_Store*'" desktop.ini)
$ echo $rsyncExclusionOptions
--exclude '*/#recycle/' --exclude @eaDir/ --exclude '.DS_Store*' --exclude desktop.ini
$ rsync -Hauv -h -P --skip-compress=$rsyncSkipCompressList $rsyncExclusionOptions user1@src_server:/volume2/Extension_1 /destination/dir/
receiving incremental file list
Extension_1/#recycle/SERIES/ONE_PIECE/SOURCES_HD59iDF/EPISODES_666-709/
Extension_1/#recycle/SERIES/ONE_PIECE/SOURCES_HD59iDF/EPISODES_666-709/TOEI_ONE-PIECE_EP681-FN_TXT-JAP-V2-2018_169-177_1080i29-422_20-JAP-INT_XX_RXX_1811TVS1652.mov
3.22G 5% 104.35MB/s 0:08:23 ^CKilled by signal 2.
rsync error: unexplained error (code 255) at rsync.c(638) [generator=3.1.2]
rsync: [generator] write error: Broken pipe (32)
rsync error: received SIGUSR1 (code 19) at main.c(1430) [receiver=3.1.2]
EDIT0: @roaima Eu também tentei colocar #
entre colchetes (como sugerido no link que você forneceu aqui ), mas também não funcionou:
$ rsyncExclusionOptions=$(printf -- "--exclude %s " "'[#]recycle/'" @eaDir/ "'.DS_Store*'" desktop.ini)
$ echo $rsyncExclusionOptions
--exclude '[#]recycle/' --exclude @eaDir/ --exclude '.DS_Store*' --exclude desktop.ini
$ rsync -Hauv -h -P --skip-compress=$rsyncSkipCompressList $rsyncExclusionOptions user1@src_server:/volume2/Extension_1 /destination/dir/
receiving incremental file list
Extension_1/#recycle/SERIES/ONE_PIECE/SOURCES_HD59iDF/EPISODES_666-709/
Extension_1/#recycle/SERIES/ONE_PIECE/SOURCES_HD59iDF/EPISODES_666-709/TOEI_ONE-PIECE_EP681-FN_TXT-JAP-V2-2018_169-177_1080i29-422_20-JAP-INT_XX_RXX_1811TVS1652.mov
4.04G 7% 21.67MB/s 0:39:45 ^CKilled by signal 2.
rsync error: unexplained error (code 255) at rsync.c(638) [generator=3.1.2]
rsync: [generator] write error: Broken pipe (32)
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(504) [receiver=3.1.2]
rsync: [receiver] write error: Broken pipe (32)
UMA SOLUÇÃO DE TRABALHO:
- O hash foi colocado entre colchetes assim:
[#]
AND - O extra
'
não deve ser usado para a[#]recycle
exclusão dentro darsyncExclusionOptions
variável:
$ rsyncExclusionOptions=$(printf -- "--exclude %s " "[#]recycle/" @eaDir/ "'.DS_Store*'" desktop.ini)
$ echo $rsyncExclusionOptions
--exclude [#]recycle/ --exclude @eaDir/ --exclude '.DS_Store*' --exclude desktop.ini
$ rsync -Hauv -h -P --skip-compress=$rsyncSkipCompressList $rsyncExclusionOptions user1@src_server:/volume2/Extension_1 /destination/dir/
receiving incremental file list
Extension_1/SERIES/ONE_PIECE/SOURCES_VF/EPISODES_700-765/
Vou responder isso para dizer que com a
rsync
versão 3.1.3 protocolo 31 não consigo reproduzir o problema como descrito ORIGINALMENTE. (Raspbian GNU/Linux 10 "buster".)A pergunta modificada mostra que a lista de exclusão está incorreta e não corresponderá aos nomes dos diretórios. Você colocou aspas simples nos nomes dos padrões e eles não correspondem aos nomes de diretório/arquivo. Consequentemente, eles não serão excluídos.
A resposta original continua abaixo.
No entanto, vejo que há outra instância não resolvida relatada no StackOverflow de nomes de arquivos que
#
causam problemas - consulte rsync failed to exclude '#filename#' file names , então você não está sozinho. Talvez tenha sido corrigido com a versão posterior que estou executando?Cenário
Agora o comando
Resultado
A única mudança significativa é que citei os padrões de exclusão para que o shell não tenha oportunidade de expandi-los (especificamente, mas não exclusivamente
'.DS_Store*'
). No entanto, se isso tivesse sido um problema neste caso, você teria recebido mensagens de errorsync
comoUnexpected remote arg: localhost:/tmp/718113/Extension_1
ersync error: syntax or usage error (code 1) at main.c(1372) [sender=3.1.3]
.Eu também recomendaria não usar
--progress
(implícito com-P
) e, em seguida, redirecionar stdout/stderr para um arquivo de log. Substitua-P
por--partial
ou use a--log
opção para gravar resultados no arquivo de log.