Archiv verlassen und diese Seite im Standarddesign anzeigen : tcsh :s/old/new/
DanielDD
06-04-2010, 15:40
Hallo Leute,
ich will in einem Tcsh-script mittels
:s/old/new/
substitutieren. Der String new ist jedoch beim Erstellen des scriptes nicht
bekannt, denn new soll der erste Parameter des scriptes sein.
Wie bekomme ich das hin? Ich bräuchte so etwas wie
:s/old/$1/
Dann wird aber old durch $1 und nicht durch den ersten Parameter ersetzt.
Wie bekomme ich das hin?
Daniel
Ungetestet:
":s/old/"$1"/"
MfG Bischi
DanielDD
06-04-2010, 16:40
Hallo Bischi,
das geht noch nicht ganz. Das script rtest (Minimalbeispiel) sieht jetzt so aus:
#!/bin/tcsh
foreach filename (`ls *JPG`)
set f = $filename":s/P/"$1"/"
echo $filename $f
mv $filename $f
end
Im aktuellen Verzeichnis ist nur eine Datei PC050005.JPG.
Der Aufruf rtest xxx liefert:
localhost:~/t$ rtest xxx
PC050005.JPG PC050005.JPG:s/P/xxx/
mv: cannot move `PC050005.JPG' to `PC050005.JPG:s/P/xxx/': No such file or directory
Exit 1
Daniel
Wie sähe denn dein Aufruf ohne Script für eine Datei aus? Bzw - existiert der Ordner xxx? ;)
MfG Bischi
DanielDD
07-04-2010, 10:58
Wie sähe denn dein Aufruf ohne Script für eine Datei aus?
Wenn ich das ganze für eine Datei von der Kommandozeile aus mache, dann
kann ich auf die ganzen Substitutionen verzichten:
mv PC050005.JPG xxxC050005.JPG
Bzw - existiert der Ordner xxx? ;)
Im aktuellen Verzeichnis gibt es keine Unterverzeichnisse. Wenn ich aber
Unterverzeichnisse PC050005.JPG:s/P/xxx/ anlege, dann bewegt das script
die Datei PC050005.JPG in dieses Verzeichnis.
:) Aber wenn ich die Sache bedenke: Es läuft wieder einmal darauf hinaus,
Kopfstände und Klimmzüge zu machen, um ein banales Problem zu lösen.
Es geht hier um irgendwelche Feinheiten bei der Behandlung von Substitutionen
durch die tcsh.
Das eigentliche Problem besteht darin, bei allen Bilddateien im Verzeichnis das P im
Dateinamen durch eine Jahreszahl zu ersetzen. Diese Jahreszahl wollte ich als
Parameter übergeben. Da aber nur die Jahreszahlen 2004 bis 2010 vorkommen,
kann ich einfach 7 scripte schreiben, und das Problem ist gelöst.......
MfG, Daniel
Ohne die tcsh jetzt im Detail zu kennen:
die mv Synthax sieht wie auf der Bash aus. Und
PC050005.JPG:s/P/xxx/
sieht für mich nicht wie ein gültiger Ordnernamen aus... Oder hab ich da was falsch verstanden?
MfG Bischi
PS: Funktioniert folgendes? Mit oder ohne erstelltem Ordner?
#!/bin/tcsh
foreach filename (`ls *JPG`)
set f = "/P/"$1"/"$filename
echo $filename $f
mv $filename $f
end
DanielDD
07-04-2010, 14:03
PC050005.JPG:s/P/xxx/
sieht für mich nicht wie ein gültiger Ordnernamen aus... Oder hab ich da was falsch verstanden?
Ich hatte zu Testzwecken ein Verzeichnis PC050005.JPG:s, darin ein Verzeichnis P
und darin ein Verzeichnis xxx angelegt.
Der Wert von f ist PC050005.JPG:s/P/xxx/, und genau dahin will mv schreiben.
Dein script von eben liefert
localhost:~/t$ rtest xxx
PC050005.JPG /P/xxx/PC050005.JPG
mv: cannot move `PC050005.JPG' to `/P/xxx/PC050005.JPG': No such file or directory
Exit 1
mv versucht wiederum, nach /P/xxx/PC050005.JPG zu schreiben.
Sorry - müsste natürlich heissen:
#!/bin/tcsh
foreach filename (`ls *JPG`)
set f = "P/"$1"/"
echo $filename $f
mv $filename $f
end
MfG Bischi
DanielDD
07-04-2010, 14:56
localhost:~/t$ rtest xxx
PC050005.JPG P/xxx/
mv: cannot move `PC050005.JPG' to `P/xxx/': No such file or directory
Exit 1
Der Wert der Variablen f ist jetzt P/xxx/, und genau dahin will mv schreiben.
Ev. musst du das Verzeichnis zuerst noch anlegen ;)
MfG Bischi
DanielDD
07-04-2010, 18:36
Ev. musst du das Verzeichnis zuerst noch anlegen ;)
Ich glaube, Du hast das Problem falsch verstanden. Ich will Dateien
innerhalb des aktuellen Verzeichnisses umbenennen. Wenn ich das script
mit dem Parameter xxx aufrufe, dann soll in jeder *.JPG-Datei im
aktuellen Verzeichnis das erste P durch xxx ersetzt werden.
Ich habe jetzt folgendes script zurechtgebastelt. Wahrscheinlich gewinne
damit ich den Preis für die umständlichste Lösung.
#!/bin/tcsh
foreach filename (`ls *JPG`)
set pos = `expr index $filename P`
set posl = `expr $pos - 1`
set posr = `expr $pos + 1`
set f = `expr substr $filename 1 $posl`$1`expr substr $filename $posr 1000`
echo $filename $f
mv $filename $f
end
Ich glaube, Du hast das Problem falsch verstanden.
Jup - das glaube ich auch ;)
MfG Bischi
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.