沮丧的大学数学教授希望假期能得到一点缓解。
问题总结:
我从 Blackboard LMS 下载了我的班级(超过 100 名学生)的文件。有些学生提交多个文件,有时是非 pdf 格式。我想将每个学生提交的文件合并为该学生的单个 pdf 文件。目前我正在使用 Acrobat 手动执行此操作。这是非常乏味的。
我希望有人可以指导我或帮助我编写一个 bash 脚本,它可以更自动地神奇地组合这些文件?
详细信息
本学期我有 130 名学生。他们的最终书面作业已通过我学院的 Blackboard LMS 提交。
与 Canvas 不同,Blackboard 不允许教授指定/限制允许的文件类型或限制提交的文件数量。 Blackboard 不提供自动将文件合并为 pdf 的选项。为什么不?我不知道。
这些文件放在一个 zip 文件中,当我解压缩时,这些文件在单个文件夹中采用以下格式:
<AssignmentName>_<Student1ID>_attempt_<datestamp>.txt
<AssignmentName>_<Student1ID>_attempt_<datestamp>_<SubmittedFile1>.jpg
<AssignmentName>_<Student1ID>_attempt_<datestamp>_<SubmittedFile2>.jpg
...
<AssignmentName>_<Student2ID>_attempt_<datestamp>.txt
<AssignmentName>_<Student2ID>_attempt_<datestamp>_<SubmittedFile1>.jpeg
<AssignmentName>_<Student2ID>_attempt_<datestamp>_<SubmittedFile2>.jpeg
...
etc.
.txt 文件包含有关学生提交的一般信息。
例子
WrittenAssignment2_40012345_attempt_2021-12-13-20-36-46.txt
WrittenAssignment2_40012345_attempt_2021-12-13-20-36-46_IMG3047.jpg
WrittenAssignment2_40012345_attempt_2021-12-13-20-36-46_IMG3048.jpg
WrittenAssignment2_40012345_attempt_2021-12-13-20-36-46_IMG3049.jpg
WrittenAssignment2_40067890_attempt_2021-12-14-16-22-39.txt
WrittenAssignment2_40067890_attempt_2021-12-14-16-22-39_AssignmentDoc.pdf
WrittenAssignment2_40098765_attempt_2021-12-12-20-08-52.txt
WrittenAssignment2_40098765_attempt_2021-12-12-20-08-52_MyUploadPg1.pdf
WrittenAssignment2_40098765_attempt_2021-12-12-20-08-52_MyUploadPg2.pdf
WrittenAssignment2_40098765_attempt_2021-12-12-20-08-52_MyUploadPg3.pdf
...
许多学生确实成功提交了单个 pdf 文件,但也有很多学生没有成功。我尝试过各种社会工程技术来让他们提交单个多页 pdf,包括提交单个 pdf 的说明,或因不合规而给 0 分,但这只会产生更多头痛。
我想要的是读取 .txt 文件列表,然后将每组相关的 pdf 或 jpg 组合成一个 pdf 并将输出作为
<AssignmentName>_<Student1ID>_attempt_<datestamp>_COMBINED.pdf
这样我只需为每个学生标记一个文件。非常感谢。
答案1
好的。我讨厌人们发布自己的答案,但今天早上我花了大约 2 个小时来研究它,这就是我的想法。它很丑陋,但它确实有效。有人在 Blackboard 教学中提供其他建议吗?谢谢。
#!/bin/bash
search_dir='./TestFiles'
n=1
for entry in "$search_dir"/*.txt
do
echo $n " Merging"
f="$(basename "$entry" .txt)"
for subfile in "$search_dir"/"$f"_*
do
echo $n " $subfile"
done
## First usd pdftk to combine any pdfs into a merged PDF
if compgen -G "${search_dir}/${f}_*.pdf" > /dev/null; then
echo "pattern exists!"
pdftk "$search_dir"/"$f"_*.pdf cat output "$search_dir"/"$f"__MERGED.pdf
echo "Merged PDFs"
fi
##If jpg or jpeg exists then combine to PDF using img2pdf
if compgen -G "${search_dir}/${f}_*.jp*" > /dev/null; then
echo "pattern exists!"
img2pdf "$search_dir"/"$f"_*.jp* --output "$search_dir"/"$f"__MERGED.pdf
echo "Merged JPGs"
fi
((n++))
done