PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Schleife: for i in *.pdf;



piccus
09.06.11, 08:01
Hallo zusammen,

ich habe ein großes PDF-Dokument. Auf jeder Seite befindet sich eine individuelle eMail-Adresse.

Der Plan ist, das Dokument in viele Einzelseiten zu zerlegen und dann mit einer Schleife nach der eMail-Adresse zu suchen und die jeweilige Datei richtig umzubenennen.

Hier ist mein bisheriges Werk:



# Zerlege großes PDF:
pdftk *.pdf burst

# Jede PDF-Datei im Ordner muss nach HTML konvertiert werden...
for i in *.pdf;
do pdftohtml $i;

# ... damit man darin nach der eMail-Adresse suchen kann:
adresse = `egrep "\w+([._-]\w)*@\w+([._-]\w)*\.\w{2,4}" $i.html`;

# Zu guter Letzt wird der Dateiname angepasst:
mv $i.pdf $adresse.pdf;
done



Das erste Problem ist die Zeile
adresse ...

Die Fehlermeldung lautet dann:
Datei pg_0001.pdf.html nicht gefunden

Das leuchtet mir ein, weil $i ja den Wert pg_0001.pdf hat und nicht pg_0001

Wie kann ich den Wert von $i so ändern, dass ich -wie in meinem Skript oben- wahlweise $i.pdf oder $i.html ansprechen kann?

Gruß
piccus

marce
09.06.11, 08:17
man basename

buzz768
09.06.11, 08:21
${i%.pdf}.html

piccus
11.06.11, 19:02
Danke buzz768, danke marce!

Mein Skript ist ein Knaller und funktioniert schon super. Jede Datei, die als Name eine eMail-Adresse trägt, wird an die jeweilige Adresse geschickt.

Aber nun möchte ich, dass mich das Skript für alle Nicht-eMail-Dateien des Ordners fragt, ob diese auch automatisch als zusätzlicher Anhang an alle verschickt werden sollen. Im Quelltext ist die Stelle markiert, an der es hakt...



#!/bin/bash

echo "Welche Klasse betrifft diese Mail:"
read klasse
echo "Klasse: " $klasse
echo "Wie lautet das Thema in Kurzform: "
read thema
echo "Thema: " $thema
echo "Anlass (Test1, Klassenarbeit2):"
read anlass
echo "Anlass: "$anlass
echo "Body :"
joe body.txt
##############################
#
# Jetzt fragt das Skript für alle Dateien, ob sie versendet werden sollen.
# Nach der Beantwortung jeder einzelnen Frage soll mutt um die entsprechenden
# Einträge erweitert werden:
# -a Datei1 -a Datei2 ...
#
##############################
for i in *; do
if [ $i != *@* ]
then
echo "Soll die Datei $i an alle versendet werden? (j/n)"; read janein
if [ $janein = "j" ]
then
echo $i " .................................................. ............ ja"
else echo $i " .................................................. ............ nein"
fi
fi
done
echo "bitte haben Sie ein wenig Geduld..."
pdftk *.pdf burst
for i in pg*;
do pdftohtml $i;
done
for i in *s.html; do
adresse=`egrep "[a-z0-9A-Z\-\_\.]+@[a-z0-9A-Z\-\_]+\.[a-z]{2,3}" $i | sed 's/<br>//g'`;
echo $adresse
mv ${i%s.html}.pdf $adresse.pdf;
rm $i
done
rm *.html
#read hallo
for i in *@*; do
adresse=`basename $i .pdf`;
echo -n $i " ... wird jetzt versendet ... "
mutt -s "`date +%Y-%m-%d` $adresse Notenbekanntgabe $anlass $klasse Thema: $thema" $adresse -a $i < body.txt ;
done
echo "That will do!!"

piccus
13.06.11, 17:40
Scheint irgendwas mit einem sog. Array zu tun zu haben.

Wie kann ich Tastatureingaben in ein Array einlesen? So habe ich es versucht. Klappt aber nicht:

echo "Soll die Datei $i an alle versendet werden? (j/n)"; read janein[]

Gruß
piccus

DrunkenFreak
13.06.11, 18:48
Das Einlesen ist so schon richtig. Die Überprüfung darauf kann aber Probleme machen. Strings überprüft kapselt man in ".


if [ "$stringvar" == "string" ]
then
do something
fi