Shellscript: Dateiendung anhängen
-
Hallo,
kennt jemand nen Link zu einem Shellscript, dass an alle Dateien eines Ordners und dessen Unterodner eine bestimmte Endung anhängt?
Ok, ich gebs zu, bin zu faul um Shellprogrammierung zu lernen
Vielen Dank
-
Mal schnell zusammengestrickt. Gibts aber auch tools für:
#!/bin/bash for i in `ls $1`; do mv $i $i.$2 done;
Nenn es rename.sh. Und führ es mit
./rename.sh dasverzeichnis endung
auf.
[edit] Unterordner fehlen leider [/edit]
-
Mit Unterverzeichnissen
#!/bin/bash for i in `find $1/* -type f`; do mv $i $i.$2 done;
Nenn es rename.sh. Und führ es mit
./rename.sh dasverzeichnis endung
aus.
-
Hey Danke, werds gleich mal Testen!
-
Sorry das Script gibt ne Fehlermeldung:
: bad interpreter: No such file or directory
-
Ok, hab nur die falschen Hochkommas verwendet.
Aber jetzt gibts nochn Problem
mailserver:/mnt # ./rename.sh test .xxx
mv: invalid option -- tHMM...
-
Lass den Punkt weg bei xxx.
-
OK habs langsam, ist schwierig die ganzen Sonderzeichen richtig abzutippen
-
Ok, hab jetzt den Punkt weggelassen, gibt aber immer noch die selbe Meldung
-
pasti schrieb:
Ok, hab jetzt den Punkt weggelassen, gibt aber immer noch die selbe Meldung
ersetze die mv $1 ... Sache mal durch
echo $i
was kommt da. Die Dateinamen? Ist test überhaupt ein Verzeichnis?
-
YUHU, jetzt gehts
Danke!!!
-
Ok hab das ganze gerade an den Orginaldaten ausprobiert. Das Problem ist jetzt nur, dass ganz vieeele Leerzeichen und Punkte in den Dateinamen sind . Die kanne das Script jetzt natürlich nicht verarbeiten. Gibts da irgend eine Lösung?
Danke
-
Versuch mal
mv "$i" "$i.$2"
-
Das hab ich schon, aber find hat das grössere Problem. Ich weiss nicht wellche Hochkommas ich wo hintunmuss, dasmit es die Ordner mit Leerzeichen auch nimmt.
Aber Danke für die Hilfe!
-
Und dann noch:
for i in "`find $1/* -type f`"; ...
Dann funktioniert es hoffentlich ...
Ansonsten poste mal die Ausgabe von
for i in "`find $1/* -type f`"; do echo "$i"; done
Edit: Hups, kleiner Fehler.
-
Deine Probleme liegen an dem "for i in `find`", find kann zB "eine Datei mit Leerzeichen" zurückgeben und dann weiß die Bash nicht dass das nur eine einzelne Datei ist. Das ist eben der Nachteil wenn Shells keine richtigen Arrays können...
-
Hat jemand vielleicht eine Idee oder weiss ein Tool wo Leerzeichen berücksichtigt werden. Zur Not auch für Windows
-
Hallo,
wieso denn für Windows ?
Unter GNU /Linux sollte es mit der bash, find und xargs folgendermaßen funktionieren:find "$1/*" -type f -print0 -exec xargs -0 mv '{}' \{\}.$2 \;
Dadurch werden die Dateinamen mit Nullzeichen (ASCII-Code 0) getrennt, es gibt also kein Problem mit Leerzeichen mehr. Die {} müssen mit '' oder \ vor der Shell geschützt werden (werden von find durch die gefundenen Dateinamen ersetzt).
Mit freundlichen Grüßen
Linuxfreak
-
Poste doch bitte nochmal Dein Testprogramm und die Fehlermeldungen, grundsätzlich ist der Ansatz doch nicht soo schlecht...
edit: Hm, nur 5 Minuten zu spät...
-
@Linuxfreak,
Habe gerade deine Lösung getestet. Find sagt mir, dass das angegebene Verzeichniss nicht existiert.