좌절한 대학 수학 교수는 휴일이 약간의 안도감을 가져다주기를 바라고 있습니다.
문제의 결론:
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