PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umbenennen von Dateien



20-03-2001, 08:10
Hallo,

ich habe ein kleines Problem mit Dateinamen.
Ich muss auf einer Remotemaschine ein paar Sachen übersetzen, und ich will, dass die Quelldatei nur wegkopiert wird, wenn die Kompilierung erfolgreich war.

Ich poste mal mein bisheriges Ergebnis, allerdings läuft das nicht so richtig. Ach ja und rename steht auf der Remote nicht zur Verfügung.
-------
echo "*******************************************"
echo Kompilierungsskript von Martin Ament SG334
echo "*******************************************"
echo
echo
echo Durchsuche das Verzeichnis
echo
echo Kompilierung gestartet > ../compile.log
echo >> ../compile.log
echo date >> ../compile.log
echo >> ../compile.log
echo >> ../compile.log


# Übersetzen
for i in *.fmb;
do
if test -s $i
then
f60genm module=$i userid=xxxxx Compile_All=YES >> ../compile.log
else
echo Es wurden keine Formsmodule gefunden
fi
done
# Und Ordnung machen
# Übersetzte Dateien sind x.fmx
# Quellcode Dateien sind x.fmb
for i in *.fmx;
do
if test -e $i
then
mv $i ../../forms/$i
mv `echo $i | tr x b ` ../../compiled/`echo $i | tr x b `
fi
done
------

Das ganze läuft auch fein, nur habe ich in manchen Dateinamen ein x, zum Bespiel text_form.fmx und er macht mir dann tebt_form.fmb daraus, und das funktioniert leider nicht. Ich habe keine Möglichkeit gefunden um tr auf einen String zu vergleichen sonst könnte ich fmx durch fmb ersetzen lassen.

Wäre nett, wenn mir einer weiterhelfen könnte.

Gruss Martin

20-03-2001, 15:14
Hallo,

habe das Problem lösen können, aber das mit der Substitution war ein sehr guter Ansatz.

Danke Martin

PS: Ich habe die Existenz immer überprüft, weil er mir sonst den Fehler brachte, dass er die Quelldatei *.fmx nicht finden konnte.

pitu
20-03-2001, 15:19
Wie waere es mit:



for i in *.fmx; do
NAME=`basename $i .fmx`
if test -e $i; then
mv $i ../../forms/$i
mv $i $NAME.fmb
../../compiled/$NAME.fmb
fi
done


thorsten

------------------
Thorsten Wandersmann
SuSE GmbH, Nuernberg

20-03-2001, 17:05
Probier ich morgen gleich aus,
für heute ist Feierabend.

Dankeschön

martin

21-03-2001, 00:32
Schau dir mal mmv an.
man mmv
Damit kannst Du deine ganz for-Schleife ersetzten.

mmv dir1/\*.fmx dir2/\#1.fmb
Kopiere alle *.fmx aus dir1 nach dir2 als *.fmb

Ach quatsch, ich seh grad du willst eigentlich was anderes.

Naja du koentest sed nehmen statt tr
sed -e "s/\.fmx/.fmb/"

Mit der Bash geht es aber noch einfacher mit
${i/.fmx/.fmb}

als

for FMX in *.fmx;
do
# wieso du hier nochmal auf Existenz
# pruefts weis ich nicht, halte ich
# aber fuer unnoetig
FMB=${FMX/.fmx/.fmb}
mv $FMX ../../forms/$FMX
mv $FMB ../../compiled/$FMB
done