rsync: mkdir “2014-11 /.” falhou: Nenhum arquivo ou diretório (2)

4

Eu escrevo um script para o arquivo de cópia de automação com o rsync do server-a para o server-b este é o meu script:

#!/bin/bash
NOW=$(date +"%Y-%m")
rsync -au --ignore-existing /var/www/uploads/$NOW/* -e [email protected]:/var/www/uploads/$NOW/.

quando estamos indo para um próximo mês, como de outubro a novembro, recebo este erro no meu script:

'

rsync: mkdir "/var/www/uploads/2014-11/." failed: No such file or directory (2)
rsync error: error in file IO (code 11) at main.c(605) [Receiver=3.0.9]
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]

como devo corrigir esse erro? por favor me ajude

    
por syntaxerro 02.11.2014 / 11:11

2 respostas

3

Primeiramente, verifique se o diretório pai no destino existe. Ou seja [email protected]:/var/www/uploads deve existir. Eu acho que com a sua formulação, o trailing . refere-se a um diretório que o rsync tenta criar, e ele não pode fazer isso a menos que o diretório pai já exista. ou seja, o pai é [email protected]:/var/www/uploads/$NOW .

Em segundo lugar, perceba que o comportamento do rsync é sutilmente diferente do cp de várias maneiras com o '/' no nome do arquivo. Acho que a maneira mais segura e intuitiva de fazer as coisas é usar um / no final de todos os diretórios. Assim:

rsync -au --ignore-existing /var/www/uploads/$NOW/ -e [email protected]:/var/www/uploads/$NOW/

Diferentemente do cp, o rsync copia de forma confiável o conteúdo do diretório no argumento de origem para o conteúdo do diretório de destino, criando o diretório de destino se necessário (embora seu pai deva existir) e não colocando o diretório de origem pai) dentro do diretório de destino, se o destino já existir.

Isso é um pouco diferente do que você estava fazendo, pois a maneira como você o faz excluiria os arquivos com um nome começando com . no diretório de origem e falharia se a lista de arquivos copiados fosse muito longa ( expansão bash limitada a um comprimento total de linha de comando de cerca de 32K caracteres se a memória me servir corretamente).

    
por 02.11.2014 / 13:36
1

O ponto final precisa ser removido, mude o script para:

rsync -au --ignore-existing /var/www/uploads/$NOW/* -e [email protected]:/var/www/uploads/$NOW
    
por 02.11.2014 / 11:49

Tags