我应该说我在这方面只是一个业余爱好者。下面从我的网页获取作业文件。效果很好。
rsync -av --progress -e 'ssh -i ~/.ssh/godaddy5_rsa' $user@$server:${RemotePath}/ "${Answers}"
所有文件名如下所示:
1112223334_18BEwW4数据
第一个学生编号 (1112223334),然后是 _class (_18BE),然后是周数(wW4 = 冬季学期第 4 周)加上数据
路径如下:
RemotePath="public_html/18BE/php/uploads"
Answers="/home/pedro/winter2019-20/18BE/fastmarker"
当然,随着任期的进行,wWX 将会发生变化。我制作了一个小 bash 脚本来获取周数并将其插入到我的 rsync 脚本中:
echo "First, enter the week number you want to get."
read week
echo "You are fetching winter week $week"
echo "If this is correct, enter y, if not enter n to abort."
read answer
if [ $answer = "n" ]; then
echo "You entered the wrong week number, aborting script, byebye. Start again!"
exit
fi
echo "You entered the correct week number, I'll carry on!"
现在我只想获取名称中包含 $week 的文件,下周将是 wW4。
我一直在阅读 rsync 手册页并尝试 --include 和 --exclude 的各种组合
我得到的要么什么也没有,要么全是文件,即文件名中也有 wW1、wW2 和 wW3 的文件。
我应该如何告诉 rsync 只获取名称中带有 $week (下周将是 wW4)的文件?
编辑:感谢您的建议。我试过这个:
rsync -av --progress -e 'ssh -i ~/.ssh/godaddy5_rsa' $user@$server:${RemotePath}/*_18BEwW4data "${Answers}"
可悲的是,我什么也没得到。我需要一个学生编号的通配符,因为它们都是不同的。
我将一些文件重命名为以 *.wW4 结尾,然后我尝试了以下操作:
rsync -av --progress -e 'ssh -i ~/.ssh/godaddy5_rsa' $user@$server:${RemotePath}*.wW4 "${Answers}"
我在 bash 中收到此错误:
第三,将文件从远程服务器获取到这台计算机。接收增量文件列表 rsync: link_stat "/home/myusername/public_html/18BE/php/uploads*.wW4" 失败: 没有这样的文件或目录 (2)
发送 8 字节接收 123 字节 15.41 字节/秒总大小为 0 加速为 0.00 rsync 错误:某些文件/属性未传输(请参阅以前的错误)(代码 23)在 main.c(1668) [Receiver=3.1.2]佩德罗@pedro-school2:~$
对不起!我的错!我在 $RemotePath 中犯了一个错误,现在它可以工作了!
谢谢,很抱歉打扰您!
答案1
rsync -av --progress -e 'ssh -i ~/.ssh/godaddy5_rsa' $user@$server:${RemotePath}/1112223334_18BEwW4* "${Answers}"
不要想太多,你不需要包含/排除,你只需要通配符。
您实际上甚至不需要计算出星期,因为您只需拥有一个包含所有作业的目录,rsync 就会获取最新的作业,如下所示:
rsync -av --progress -e 'ssh -i ~/.ssh/godaddy5_rsa' $user@$server:${RemotePath}/1112223334_18BEwW* "${Answers}"
date +%U
将返回一年中的第几周,因此您可以使用它自动生成课程的第几周,假设它是线性的,每周递增 1。或者您可以创建一个数组,其中索引指向课程周数,索引是年份周数。或者,如果它是线性关系,您只需添加/减去年周数即可。