PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kompliziertes shell script für Solaris


astra
15.11.2006, 23:23
Hallo,

ich möchte ein shell script auf einer SUN Solaris laufen lassen.
Dieses Script soll auf dem Rechner in *.class und *.jar Dateien nach bestimmten STRINGS suchen.
Der Aufruf geht so:
bash# ./check_java_files.sh STRING
Dabei soll folgendes passieren:
- zuerst wird in /var/tmp ein neues directory angelegt das checkfiles heißt. (hab ich)
- In diesem directory wird mit find eine Liste1.txt erzeugt. Sie enthält pro Zeile eine *.class oder *.jar mit kompletter Pfadangabe. (hab ich)
- Nun möchte ich diese Liste1 abarbeiten. Wenn also eine Datei dieser Liste den bei Scriptaufruf mitgegebenen STRING enthält, soll nichts passieren. Wenn der STRING nicht in der Datei enthalten ist, soll die Datei (mit der Pfadangabe) aus der Liste1.txt gelöscht haben. Hier komme ich nicht weiter. Ich weiss, dass ich die *.jar dateien erstmal auspacken muss. Dazu bietet sich /var/tmp/checkfile an. weil ich die Dateien dort zum Schluss relativ einfach löschen kann.
Kann man(n) das mit if .. then .. else tun? Ich möchte mit grep und find arbeiten, sed oder awk ist auch möglich.
Ich bin über jeden Hinweis dankbar, selbst wenn es nur ein Tip zur Vorgehensweise ist.
Auf Nachfrage bin ich für zusätzliche Infos auch per MS Messenger oder Yahoo Messenger erreichbar. Und wenn ich fertig bin, stelle ich das Script hier selbstverständlich zur Verfügung.
gruss
atsra


Mr.Homm
16.11.2006, 01:54
Wenn es nur darum geht, dass in einer irgendeiner Datei in einer .jar der gesuchte String vorkommt, kannst du dir das Auspacken sparen und mittels

unzip -p PFAD-ZU-JAR | grep -m 1 -q STRING
alle Dateien in PFAD-ZU-JAR nach STRING durchsuchen. Du weißt dann zwar nicht in welcher Datei innerhalb des JAR-Archives STRING vorkommt, aber das er vorkommt. Eine JAR-Datei ist nichts anderes als ein ZIP-Archiv. Einziges Problem ist, dass wenn eine Datei mit einem Anfang von STRING endet und die nächste Datei beginnt mit dem fehlenden Ende, wird der STRING gefunden, obwohl er 'am Stück' in keiner Datei (innerhalb des JAR) vorhanden ist. Eher unwahrscheinlich, aber natürlich von STRING abhängig.

Wenn du einen PFAD gefunden hast, der aus Liste1.txt entfernt werden soll, dann könntest du mit

>Liste1.tmp grep -v PFAD Liste1.txt
mv -f Liste1.tmp Liste1.txt
die Datei Liste1.txt aktualisieren.