rsync falha ao escolher o diretório de destino correto

4

Estou tentando escrever um script de shell curto que também manipula a cópia de um arquivo chamado webcam.jpg em um subdiretório codificado por data. Estou usando o rsync para isso, pois cria automaticamente um diretório, se ele ainda não existir.

Tudo funciona bem quando uso:

rsync -a webcam.jpg ./$(date +%Y-%m-%d)/$(date +%Y-%m-%d_%H-%M).jpg

Mas quando se vai a um diretório mais profundo, o rsync começa a gerar erros, e eu realmente não entendo por quê. Estou digitando:

rsync -a webcam.jpg ./saved_images/$(date +%Y-%m-%d)/$(date +%Y-%m-%d_%H-%M).jpg

e minha saída é:

rsync: change_dir#3 "/var/www/tmp/test//./saved_images/2013-07-07" failed: No such file or directory (2)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(677) [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]

Eu vejo o erro relevante na primeira linha, mas por que o rsync está tentando acessar esse diretório test//./saved_images ? O que há de errado com test/saved_images/ ?

    
por Kilian Koeltzsch 07.07.2013 / 17:26

1 resposta

5

Ok /var/www/tmp/test//./saved_images/2013-07-07 é o mesmo que /var/www/tmp/test/saved_images/2013-07-07 .

Duplo / é ignorado, você pode digitar ls //// e é o mesmo que ls / .

O ponto . é o mesmo diretório em que está. Portanto, ls /. mostra a mesma saída que ls / e, portanto, /var/www/tmp/test/. aponta para o diretório /var/www/tmp/test/ .

Portanto, rsync apenas pega o diretório atual, no caso você var/www/tmp/test/ (pelo menos quando seu caminho começa com . ). Em seguida, ele adiciona um / extra para que possa ter certeza de que o caminho definitivamente tenha um / para adicionar o final. Na última etapa adiciona a parte que você deu, aqui ./saved_images/$(date +%Y-%m-%d)/$(date +%Y-%m-%d_%H-%M).jpg

O erro que você está vendo é que o diretório /var/www/tmp/test/saved_images/ não está lá e rsync não irá criá-lo, porque parece que rsync cria apenas um diretório.

Editar

Talvez, para o seu problema, você apenas use um script com

today_dir=$(date +%Y-%m-%d)
mkdir -p ./$today_dir/
cp webcam.jpg ./$today_dir/$(date +%Y-%m-%d_%H-%M).jpg
    
por 07.07.2013 / 17:50

Tags