rsync 未能选择正确的目标目录

Kil*_*ian 4 debian rsync

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

当我使用时一切正常:

rsync -a webcam.jpg ./$(date +%Y-%m-%d)/$(date +%Y-%m-%d_%H-%M).jpg
Run Code Online (Sandbox Code Playgroud)

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

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

我的输出是:

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]
Run Code Online (Sandbox Code Playgroud)

我在第一行看到了相关错误,但是为什么 rsync 首先尝试访问这个test//./saved_images目录?怎么了test/saved_images/

Rap*_*ens 5

Ok/var/www/tmp/test//./saved_images/2013-07-07/var/www/tmp/test/saved_images/2013-07-07.

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

.是它所在的同一个目录。所以ls /.显示相同的输出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
Run Code Online (Sandbox Code Playgroud)