rsync 无法选择正确的目标目录

rsync 无法选择正确的目标目录

我正在尝试编写一个简短的 shell 脚本,它还可以处理将调用的文件复制webcam.jpg到日期编码的子目录中。我为此使用 rsync,因为它会自动创建一个目录(如果该目录尚不存在)。

当我使用时一切正常:

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

但是当深入一个目录时,rsync 开始抛出错误,我真的不知道为什么。我正在输入:

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

我的输出是:

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]

test//./saved_images我在第一行看到相关错误,但为什么 rsync首先尝试访问此目录?有什么问题吗test/saved_images/

答案1

好的/var/www/tmp/test//./saved_images/2013-07-07与 相同/var/www/tmp/test/saved_images/2013-07-07

Double/被忽略,您可以键入它ls ////,它与 相同ls /

.与它所在的目录相同。sols /.显示与 相同的输出,ls /因此/var/www/tmp/test/.指向目录/var/www/tmp/test/

因此,rsync在您的情况下,只需获取它所在的当前目录var/www/tmp/test/(至少当您的路径以 a 开头时.)。然后它会添加一个额外的内容/,这样它就可以确保它的路径肯定有一个/添加结尾。在最后一步中,它添加了您给它的部分,在这里./saved_images/$(date +%Y-%m-%d)/$(date +%Y-%m-%d_%H-%M).jpg

您看到的错误是该目录/var/www/tmp/test/saved_images/不存在并且rsync不会创建它,因为它只rsync创建一个目录。

编辑

也许对于你的问题你应该只使用一个脚本

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

相关内容