• Herzlich Willkommen!

    Nach der Schließung von inDiablo.de wurden die Inhalte und eure Accounts in dieses Forum konvertiert. Ihr könnt euch hier mit eurem alten Account weiterhin einloggen, müsst euch dafür allerdings über die "Passwort vergessen" Funktion ein neues Passwort setzen lassen.

    Solltet ihr keinen Zugriff mehr auf die mit eurem Account verknüpfte Emailadresse haben, so könnt ihr euch unter Angabe eures Accountnamens, eurer alten Emailadresse sowie eurer gewünschten neuen Emailadresse an einen Administrator wenden.

Mal wieder ein bash-Problem

Die Zeile wo cut und sed die Kalenderwoche der betrachteten Datei extrahieren muss fuer das Format der Dateinamen angepasst werden. Es kann auch fuer verschiedene Namensformate die Kalenderwoche extrahiert werden, jedoch muss in der Zeile jeder einzelne Fall abgedeckt werden. Natuerlich auch die while-Zeile, damit das ls-Kommando alle gewollten Dateien findet.
 
Also mein Script sieht jetzt so aus:

#!/bin/sh
kw=$(date +%V)
date= date +%V
ls Essensplan_Schulverpflegung*.pdf | while read f; do
ckw=$(echo $f | sed 's/kw\([0-5][0-9]\)[.-].*pdf/\1/g')

if [ $ckw -lt $kw ]; then
echo "removing $f"
rm $f
fi
done
echo $date
 
Der regulaere Ausdruck im sed-Befehl matcht halt deine neuen Dateinamen nicht, weil dort kein "kw00-" drin vorkommt. Den musst du so anpassen, dass er zu deinen Dateinamen passt.
 
Was macht denn überhaupt der Ausdruck ckw=$(echo $f | sed 's/kw\([0-5][0-9]\)[.-].*pdf/\1/g') genau?

Also ich habe mal das Script meines neues Dateinamens entsprechend angepasst. Ich hoffe das ist so korrekt?

#!/bin/sh
kw=$(date +%V)
date= date +%V
ls Essensplan_Schulverpflegung*.pdf | while read f; do
ckw=$(echo $f | sed 's/Essensplan_Schulverpflegung\([0-5][0-9]\)[.-].*pdf/\1/g')

if [ $ckw -lt $kw ]; then
echo "removing $f"
rm $f
fi
done
echo $date
 
Zuletzt bearbeitet:
Der aktuelle Datiename wird an sed uebergeben und es wird einfach die Kalenderwoche extrahiert. Ich tippe mal, dass regulaere Ausdruecke dir nicht fremd sind. Als replacement wird hier "\1" gewaehlt, dass ist die erste gematchte Teilgruppe, in unserem Fall also die Kalenderwoche. Auch hier kann man den Ausdruck natuerlich noch anpassen, z.B. werden jetzt nur die Dateien genommen, die tatsaechlich nach der Kalenderwoche ein '-' oder ein '.' haben, sollten da noch weitere Varianten dazukommen, einfach in die eckigen Klammern eintragen, die den Punkt und den Bindestrich enthalten.

Hatte ich hier eigentlich auch schon beschrieben...
Wenn da irgendwas unklar geblieben ist, haettest du das am besten sofort gesagt.


Auch das hatten wir schon:
Was an deinem Skript weiterhin scheitert:
kw=date +%V
hier willst du das Ergebnis von date speichern, du musst es daher in Backticks schreiben:
kw=`date +%V`
alternativ:
kw=$(date +%V)

Vielleicht solltest du dich erstmal grundlegend mit Linux und der Konsole vertraut machen, bevor du zur Shell-Programmierung uebergehst. Als erste Anlaufstelle solltest du dir vielleicht einen eher Programmiereinsteiger-freundlichen Guide suchen, zur Vertiefung wuerde ich dir den Advanced Bash-Scripting Guide empfehlen.
 
Zurück
Oben