我正在尝试编写一个简短的 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