Se você tem uma árvore de arquivos relativamente simples, onde você tem apenas um nível de diretórios, e onde cada diretório contém uma lista de arquivos, mas não há sub-diretórios, você deve ser capaz de fazer algo assim (você pode colar diretamente no seu terminal e tecle Enter ):
for dir in *; do ## For each directory
if [ "$(ls -A "$dir")" ]; then ## If the dir is not empty
for file in "$dir"/*; do ## For each file in $dir
i=0; ## initialize a counter
## Get the subject
sub=$(grep ^Subject: "$file" | cut -d ':' -f 2-);
## get the date, and format it to MMDDYY_Hour:Min:Sec
date=$(date -d "$(grep ^Date: $file | cut -d ':' -f 2-)" +%m%d%y_%H:%M:%S);
## the pdf's name will be <directory's name> _ <date> _ <subject>
name="$dir"_"$date"_"$sub";
## if a file of this name exists
while [ -e "$dir/$name".pdf ]; do
let i++; ## increment the counter
name="$dir"_"$date"_"$sub"$i; ## append it to the pdf's name
done;
wkhtmltopdf "$file" "$dir"/"$name".pdf; ## convert html to pdf
done
fi
done
NOTAS
-
Esta solução requer
wkhtmltopdf
:Simple shell utility to convert html to pdf using the webkit rendering engine, and qt.
Em sistemas baseados em Debian, você pode instalá-lo com
sudo apt-get install wkhtmltopdf
-
Assume-se que não há nenhum arquivo no diretório de nível superior e apenas os arquivos html desejados em todos os subdiretórios.
-
Ele pode lidar com nomes de arquivos e diretórios que contenham espaços, novas linhas e outros caracteres não ortodoxos.
-
Dado um arquivo
dir1/foo
com o conteúdo do exemplo que você publicou, ele criará um arquivo chamadodir1/dir1_020513_20:59:53_Civilized Discourse Construction Kit10.pdf