我正在尝试编写一个简短的 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/?
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)
| 归档时间: |
|
| 查看次数: |
5673 次 |
| 最近记录: |