Во-первых, если я правильно понимаю, это требование:
Для каждого обнаруженного подкаталога преобразуйте все файлы с указанным расширением в один PDF-файл с именем $ NameOfDirectory $ .PDF
неразумно.Если это означает, скажем, что a/b/c/*.cpp
записывается в ./c.pdf
, то вы облажались, если у вас также есть a/d/x/c/*.cpp
, поскольку содержимое обоих каталогов отображается в один и тот же PDF.Это также означает, что *.cpp
(то есть файлы CPP в current dir) записывается в файл с именем ./..pdf
.
Что-то вроде этого, который называет PDF в соответствии с желаемымрасширение и помещает его в каждый подкаталог вместе с его исходными файлами, не имеет таких проблем:
#!/usr/bin/env bash
# USAGE: ext2pdf [<ext> [<root_dir>]]
# DEFAULTS: <ext> = cpp
# <root_dir> = .
ext="${1:-cpp}"
rootdir="${2:-.}"
shopt -s nullglob
find "$rootdir" -type d | while read d; do
# With "nullglob", this loop only runs if any $d/*.$ext files exist
for f in "$d"/*.${ext}; do
out="$d/$ext".pdf
# NOTE: Uncomment the following line instead if you want to risk name collisions
#out="${rootdir}/$(basename "$d")".pdf
enscript -Ecpp -MLetter -fCourier8 -o - "$d"/*.${ext} | ps2pdf - "$out"
break # We only want this to run once
done
done