Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Hallihallo!
Ich schreibe gerade ein Skriptchen, das zwei Verzeichnisse synchronisieren soll. Da ich keinerlei Einschränkungen hinnehmen möchte (z.B. "Dateien mit Leerzeichen oder Umlauten im Namen sind tabu"), suche ich nach einer Möglichkeit, Dateien mit Sonder- oder Leerzeichen im Namen *aus einem Skript heraus* zu kopieren.
In Form eines direkt eingegebenen Shellbefehls bekomme ich das hin, dieselbe (wirklich dieselbe, ich hab's dutzende Male probiert und schon eine Hornhaut auf der Brille) Syntax scheitert im Skript jedoch an Fehlermeldungen von 'stat', das wohl von cp aufgerufen wird.
Bin ich doof? Habe ich Tomaten auf den Augen?
Jede Hilfe wird dankbar entgegengenommen!
Gregor
Ich schreibe gerade ein Skriptchen, das zwei Verzeichnisse synchronisieren soll. Da ich keinerlei Einschränkungen hinnehmen möchte (z.B. "Dateien mit Leerzeichen oder Umlauten im Namen sind tabu"), suche ich nach einer Möglichkeit, Dateien mit Sonder- oder Leerzeichen im Namen *aus einem Skript heraus* zu kopieren.
In Form eines direkt eingegebenen Shellbefehls bekomme ich das hin, dieselbe (wirklich dieselbe, ich hab's dutzende Male probiert und schon eine Hornhaut auf der Brille) Syntax scheitert im Skript jedoch an Fehlermeldungen von 'stat', das wohl von cp aufgerufen wird.
Bin ich doof? Habe ich Tomaten auf den Augen?
Jede Hilfe wird dankbar entgegengenommen!
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
- schorsch_76
- Beiträge: 2629
- Registriert: 06.11.2007 16:00:42
- Lizenz eigener Beiträge: MIT Lizenz
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Morgen und noch frohe Weihnachten!
Quote die dateinamen in "" . Bsp.
schorsch
Quote die dateinamen in "" . Bsp.
Grußmv "mein name mit leerzeichen und äöü" "/home/xxx/meine sachen mit leer/."
schorsch
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Hallo Schorsch,
erstmal Danke für die Antwort. Aber leider funktioniert das eben nicht. Als direkt in die Shell eingetippter oder kopierter Befehl tut das klaglos. Sobald ich etwas derartiges im Skript machen möchte, bekomme ich z.B.
Die erste Zeile ist die Ausgabe des Befehls per echo.
Wie zu erkennen ist, wird, wenn cp stat aufruft, die Angabe der Quelldatei wieder so behandelt, als wären die Anführungszeichen nicht da.
Als möglichen Workaround habe ich schon darüber nachgedacht, Dateien mit Leerzeichen vorübergehend in welche ohne Leerzeichen umzubenennen. Aber das würde dann eben nur für Leerzeichen etwas bringen und nicht pauschal für alle anderen Sonderzeichen auch.
Gruß
Gregor
erstmal Danke für die Antwort. Aber leider funktioniert das eben nicht. Als direkt in die Shell eingetippter oder kopierter Befehl tut das klaglos. Sobald ich etwas derartiges im Skript machen möchte, bekomme ich z.B.
Code: Alles auswählen
Befehl ist "cp -ar "/home/xxx/dokumente/sync/dokumente/shellskript/gss/test1/./datei mit leerzeichen.txt" /home/xxx/dokumente/sync/dokumente/shellskript/gss/test2/"
cp: Aufruf von stat für „"/home/xxx/dokumente/sync/dokumente/shellskript/gss/test1/./datei“ nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für „mit“ nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für „leerzeichen.txt"“ nicht möglich: Datei oder Verzeichnis nicht gefunden
Wie zu erkennen ist, wird, wenn cp stat aufruft, die Angabe der Quelldatei wieder so behandelt, als wären die Anführungszeichen nicht da.
Als möglichen Workaround habe ich schon darüber nachgedacht, Dateien mit Leerzeichen vorübergehend in welche ohne Leerzeichen umzubenennen. Aber das würde dann eben nur für Leerzeichen etwas bringen und nicht pauschal für alle anderen Sonderzeichen auch.
Gruß
Gregor
Zuletzt geändert von GregorS am 25.12.2009 11:30:36, insgesamt 1-mal geändert.
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
da scheinen zu viele Hochzeichen zu sein. Aber poste doch mal das Skript - sonst wird man schwer einen Fehler finden.
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Hm, was soll denn das sein:
Aus dem stat Aufruf sieht es fast so aus, das der Punkt das Problem ist. Soll die Datei versteckt sein? Warum dann der Slash!?
Gruß
?/./
Aus dem stat Aufruf sieht es fast so aus, das der Punkt das Problem ist. Soll die Datei versteckt sein? Warum dann der Slash!?
Gruß
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Hallo Michael,
die "äußeren" Hochkommas sind die, die ich im echo-Befehl angegeben habe. Die um den Quellpfad werden beim Zusammenbau von Variablen im Skript erzeugt. Auch das "/./" ist noch so ein Überbleibsel, die Variable, die den Dateinamen enthält, beginnt mit "./" und zusammen mit dem Pfad zum Quellverzeichnis wird dann eben "/./" draus. Das dürfte aber keinesfalls die Ursache für das Problem sein, denn der "." in einem Verzeichnis steht ja für das Verzeichnis selbst.
Ich werde sehen, dass ich ein Skriptchen poste, das die Problematik verdeutlicht. Den aktuellen Stand meines Sync-Skriptchens möchte ich hier lieber nicht loslassen, denn das hat mittlerweile einige Zeilen.
Gruß
Gregor
die "äußeren" Hochkommas sind die, die ich im echo-Befehl angegeben habe. Die um den Quellpfad werden beim Zusammenbau von Variablen im Skript erzeugt. Auch das "/./" ist noch so ein Überbleibsel, die Variable, die den Dateinamen enthält, beginnt mit "./" und zusammen mit dem Pfad zum Quellverzeichnis wird dann eben "/./" draus. Das dürfte aber keinesfalls die Ursache für das Problem sein, denn der "." in einem Verzeichnis steht ja für das Verzeichnis selbst.
Ich werde sehen, dass ich ein Skriptchen poste, das die Problematik verdeutlicht. Den aktuellen Stand meines Sync-Skriptchens möchte ich hier lieber nicht loslassen, denn das hat mittlerweile einige Zeilen.
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Woran meinst Du erkennen zu können, dass der Punkt das Problem sei?Aus dem stat Aufruf sieht es fast so aus, das der Punkt das Problem ist. Soll die Datei versteckt sein? Warum dann der Slash!?
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Hallo,
da ich exzessiv Variablen verwendet habe, lässt sich mein Skriptchen schlecht kürzen oder nur auszugsweise posten. Ich habe es daher unter
http://nopaste.debianforum.de/33809
abgelegt. Die problematischen Zeilen befinden sich ziemlich nah am unteren Ende, so ca. bei Zeile 335. Zu erkennen ist der Teil, an dem ich gerade hänge, an zwei Rauten (#), die sich jeweils am Zeilenanfang befinden.
Gruß
Gregor
da ich exzessiv Variablen verwendet habe, lässt sich mein Skriptchen schlecht kürzen oder nur auszugsweise posten. Ich habe es daher unter
http://nopaste.debianforum.de/33809
abgelegt. Die problematischen Zeilen befinden sich ziemlich nah am unteren Ende, so ca. bei Zeile 335. Zu erkennen ist der Teil, an dem ich gerade hänge, an zwei Rauten (#), die sich jeweils am Zeilenanfang befinden.
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Auch wenn’s Dir vielleicht anders scheint, die Zahl der Hochkommas stimmt perfekt. Vielleicht übersiehst Du, dass sich die erste Zeile der Ausgabe über zwei Zeilen des "Code"-Zitats erstreckt. Das Skriptchen habe ich mittlerweile in den nopaste-Berfeich gestellt - s. anderes Posting.ub13 hat geschrieben:da scheinen zu viele Hochzeichen zu sein. Aber poste doch mal das Skript - sonst wird man schwer einen Fehler finden.
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Da sind mehrere Hochkommas drin? Das könnte ein Problem sein. Aber ehrlich gesagt, mir fehlt die Lust, mich durch hundert Zeilen Code zu lesen.GregorS hat geschrieben: Auch wenn’s Dir vielleicht anders scheint, die Zahl der Hochkommas stimmt perfekt. Vielleicht übersiehst Du, dass sich die erste Zeile der Ausgabe über zwei Zeilen des "Code"-Zitats erstreckt. Das Skriptchen habe ich mittlerweile in den nopaste-Berfeich gestellt - s. anderes Posting.
Teste halt mal mit set -x oder bring ein einfaches Minimalbeispiel.
Meine Whishlist
:wq!
:wq!
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Einen Fehler erkenne ich so nicht. Aber auf jeden Fall werden die Anführungszeichen nicht beachtet, wodurch die oben stehenden Fehlermeldungen entstehen.
Nutze doch statt "cp" mal "rsync". Wie sieht das Ergebnis dann aus? Auch solltest du die Anführungszeichen vielleicht im Script nicht um die Variable, sondern bereits in der Variablen einbauen. Vielleicht liegt es daran.
Nutze doch statt "cp" mal "rsync". Wie sieht das Ergebnis dann aus? Auch solltest du die Anführungszeichen vielleicht im Script nicht um die Variable, sondern bereits in der Variablen einbauen. Vielleicht liegt es daran.
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
hätte mir das gerne angeguckt, bekomme aber selbst nach dem Download nur ein paar Leerzeichen und Zeilenumbrüche zu sehen:GregorS hat geschrieben: http://nopaste.debianforum.de/33809
Code: Alles auswählen
gms@gms1 ~/tmp/download $ hexdump 33809.txt
0000000 200a 2020 0a20
0000006
Gruß
gms
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Wurde auf Bitte des Autors wieder entfernt.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Nochmals hallo!
Danke für Eure Antworten.
Das Problem besteht immer noch, allerdings hat mich ein Freund auf die Idee gebracht, dass sich Login-Shell und die im Skript Verwendete evtl. unterscheiden. Das könnte erklären, warum der Befehl als direkt eingegebener Shell-Befehl funktioniert, nicht aber im Skript. Ich werde das Problem einfach mal etwas ruhen lassen. Hin und wieder bringt ja der zeitliche Abstand eine Lösung.
Gruß
Gregor
Danke für Eure Antworten.
Das Problem besteht immer noch, allerdings hat mich ein Freund auf die Idee gebracht, dass sich Login-Shell und die im Skript Verwendete evtl. unterscheiden. Das könnte erklären, warum der Befehl als direkt eingegebener Shell-Befehl funktioniert, nicht aber im Skript. Ich werde das Problem einfach mal etwas ruhen lassen. Hin und wieder bringt ja der zeitliche Abstand eine Lösung.
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Wo ist das dokumentiert? 'man set' und 'apropos set' ergaben keine hilfreichen Hinweise.chrisbra hat geschrieben: ... set -x ... .
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
GregorS hat geschrieben: Wo ist das dokumentiert? 'man set' und 'apropos set' ergaben keine hilfreichen Hinweise.
findest du aber auch z.B unter "man bash" beschriebenman set hat geschrieben: -x The shell shall write to standard error a trace for each command after it expands the command and
before it executes it. It is unspecified whether the command that turns tracing off is traced.
Gruß
gms
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Hm. 'man set' ergibt bei mirgms hat geschrieben:findest du aber auch z.B unter "man bash" beschriebenman set hat geschrieben: -x The shell shall write to standard error a trace for each command after it expands the command and
before it executes it. It is unspecified whether the command that turns tracing off is traced.
Und ob 'man bash' verlässliche Informationen ergibt, steht in den Sternen. In einem anderen Thread musste ich erfahren, dass es bei der Bash mal inkompatible Änderungen gab. Wenn man das extrapoliert, ergibt sich: Verlässlich ist (wahrscheinlich) nur, was man selbst programmiert hat.No manual entry for set
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
'manpages-posix' nicht installiert ?GregorS hat geschrieben:Hm. 'man set' ergibt bei mir
No manual entry for set
alle Manpages werden von Menschen gewartet und sind daher potentiell fehlerbehaftetGregorS hat geschrieben: Und ob 'man bash' verlässliche Informationen ergibt, steht in den Sternen.
naja, dein Script dürfte auch nicht fehlerfrei seinGregorS hat geschrieben: Verlässlich ist (wahrscheinlich) nur, was man selbst programmiert hat.
Warum hast du das eigentlich entfernen lassen?
Gruß
gms
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
man bashGregorS hat geschrieben:Wo ist das dokumentiert? 'man set' und 'apropos set' ergaben keine hilfreichen Hinweise.chrisbra hat geschrieben: ... set -x ... .
Meine Whishlist
:wq!
:wq!
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Nein, hatte ich tatsächlich nicht. Ich finde, sowas sollte Teil des Grundsystems sein. Zumindest, wenn Programme installiert werden, deren Doku dort zu finden ist. Ich kann mich nicht erinnern, das weggeklickt zu haben (hätte ich sicherlich auch nicht, denn Platz ist selten ein Problem).'manpages-posix' nicht installiert ?
Na, deshalb hatte ich ja hier gefragtnaja, dein Script dürfte auch nicht fehlerfrei sein
Obwohl es das, was es soll, noch nicht kann, ist es schon über 300 Zeilen lang. Im Gegensatz zu einem Freund, der Programme vom Kern her zu schreiben beginnt, fange ich (zumindest derzeit) immer damit an, dass ich das "Gerüst" außenrum baue. Mit Gerüst meine ich z.B. das Parsen der Befehlszeile oder das, was bei Angabe von '-h' erscheint.Warum hast du das eigentlich entfernen lassen?
Ebenso schreibe ich meistens vor der ersten echten Codezeile schonmal, was ich vorhabe. Daraus entstehen dann die Kommentare im Quellcode.
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
das ist ja auch gut so ...GregorS hat geschrieben:Obwohl es das, was es soll, noch nicht kann, ist es schon über 300 Zeilen lang. Im Gegensatz zu einem Freund, der Programme vom Kern her zu schreiben beginnt, fange ich (zumindest derzeit) immer damit an, dass ich das "Gerüst" außenrum baue. Mit Gerüst meine ich z.B. das Parsen der Befehlszeile oder das, was bei Angabe von '-h' erscheint.Warum hast du das eigentlich entfernen lassen?
Ebenso schreibe ich meistens vor der ersten echten Codezeile schonmal, was ich vorhabe. Daraus entstehen dann die Kommentare im Quellcode.
Dein Script habe ich ja leider nicht gesehen, aber Shellscripte lassen sich sehr leicht über "Shell Function Definitions" ( siehe man bash ) modularisieren. Wenn sich diese Funktionen dann vielleicht sogar auch in anderen Scripten nutzen lassen, können diese auch in eigene Dateien ausgelagert werden, die dann von dem jeweiligen Script "gesourced" werden ( siehe man "source filename [arguments]" )
Aber selbst wenn das Script 300 Zeilen umfaßt, ist mir der Grund für das Entfernen schleierhaft
Gruß
gms
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Es ging nicht um Fehler. Über sowas rege ich mich selten auf.gms hat geschrieben:alle Manpages werden von Menschen gewartet und sind daher potentiell fehlerbehaftetGregorS hat geschrieben: Und ob 'man bash' verlässliche Informationen ergibt, steht in den Sternen.
Echt blöd finde ich aber, wenn es bei einem so wichtigen und zentralen Tool wie einer weit verbreiteten Shell Änderungen gibt, die neuere Versionen inkompatibel machen. Das kann man ja nun wirklich vermeiden.
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Mach' Dir nix draus. Ich weiß auch nicht alles, was ich gerne wüsstegms hat geschrieben: (...) Grund für das Entfernen schleierhaft
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
diese Änderung macht die Shell dafür kompatibler zu anderen Shells. Womit wir bei der Frage wären: welche Kompatibilität zählt mehr, die zu einem undokumentierten "Feature" ( eher Fehler ) einer Vorversion, meiner Meinung nach nicht.GregorS hat geschrieben: Echt blöd finde ich aber, wenn es bei einem so wichtigen und zentralen Tool wie einer weit verbreiteten Shell Änderungen gibt, die neuere Versionen inkompatibel machen.
Re: Datei mit 'üblem' Dateinamen skriptgesteuert kopieren
Ah, verstehe, das war der Grund, du möchtest ja das Problem mit deinen 'üblen' Dateinamen ruhen lassenGregorS hat geschrieben: Ich weiß auch nicht alles, was ich gerne wüsste