Hallo, also ich versuche gerade ein Script zu schreiben, mit dem ich Backups verifizieren kann. Dazu möchte ich ein Band komplett wiederherstellen, um dann die wiederhergestellten Dateien mit den Originalen vergleichen zu können. Im Moment versuche ich sowas wie for foo in $(find /pfad/zum/restore/* -type f); do verifizieren ;done Das Problem ist, dass dann Dateien mit einem Leerzeichen im Namen nicht in einem Stück in $foo landen, sondern eben bei den Leerzeichen aufgeteilt werden... Hat irgendwer da ne idee, wie das geht, ohne dass ich auf den Netzlaufwerken auf Leerzeichen verzichten muss? Bin leider nicht so fit beim shell-scripten, deshalb müsst Ihr mir da mal auf die Sprünge helfen :P Gruss luk
dadirtyluk wrote:
Das Problem ist, dass dann Dateien mit einem Leerzeichen im Namen nicht in einem Stück in $foo landen, sondern eben bei den Leerzeichen aufgeteilt werden...
So z.B.: find . -type f | while read file; do echo "<$file>"; done -- Viele Grüße ------------------------------------------------------------------------ Michael
Im Moment versuche ich sowas wie
for foo in $(find /pfad/zum/restore/* -type f);
do verifizieren
;done
Das Problem ist, dass dann Dateien mit einem Leerzeichen im Namen nicht in einem Stück in $foo landen, sondern eben bei den Leerzeichen aufgeteilt werden...
Hallo, dadirtyluk wrote: probiers mal mit --- for foo in "$(find /pfad/zum/restore/* -type f)"; --- ist aber ungetestet... grüsse rs
Hallo Freunde, weil es hier um Shell Scipts geht: Kann Euch ein dolles
Buch empfehlen,
das heißt "Einführung in die bash Shell", behandelt die bash 3.0 in
deutsch übersetzt,
Autor Cameron Newham & Bill Rosenblatt. Verlag O`REILLY kostet ca. 34 EUR.
1.Auflage 2005
Ist sehr gut geschrieben und auch für einen UNIX Anfänger wie mich sehr
gut verständlich !
Walter Geppert aus München
On Mon, 23 Jan 2006 11:49:38 +0100, dadirtyluk
Hallo,
also ich versuche gerade ein Script zu schreiben, mit dem ich Backups verifizieren kann. Dazu möchte ich ein Band komplett wiederherstellen, um dann die wiederhergestellten Dateien mit den Originalen vergleichen zu können.
Im Moment versuche ich sowas wie
for foo in $(find /pfad/zum/restore/* -type f);
do verifizieren
;done
Das Problem ist, dass dann Dateien mit einem Leerzeichen im Namen nicht in einem Stück in $foo landen, sondern eben bei den Leerzeichen aufgeteilt werden...
Hat irgendwer da ne idee, wie das geht, ohne dass ich auf den Netzlaufwerken auf Leerzeichen verzichten muss? Bin leider nicht so fit beim shell-scripten, deshalb müsst Ihr mir da mal auf die Sprünge helfen :P
Gruss luk
-- Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
Hallo, ich zitiere mich im Folgenden mal selbst, weil ... die Frage taucht regelmäßig aller Vierteljahre in irgendeinem Zusammenhang auf. Vielleicht wäre es an der Zeit, sowas mal in die FAQ aufzunehmen. Gruss, Chr.
Walter E. Eisenhauer wrote:
hallo,
das Verhalten von Linux, daß eine Datei aus zwei Namen "doppelt" ausgeführt wird ist korrekt. Man kann aber sehr wohl einer Datei mehrere Einzelbegriffen zuordnen.
Schreibe statt "Meine Daten" - korrekt "Meine_Daten" und schon ist das Problem gelöst.
Das hängt vom Inhalt der shell-Variablem IFS (Internal Field Separator) ab, Das is eine Zeichenkette, die enthält normalerweise Leerzeichen, Tabulator und Newline. Folgerichtig wird das Leerzeichen dan als Trennzeichen interpretiert mit dem bekannten Ergebnis.
Um das zu lösen macht man sinnvollerweise Folgendes:
OldIFS=$IFS # erstmal sichern IFS=' ' # Zeilenende hinter den beiden Hochkommas, 2. Hochkomma qam Zeilenanfang, # Damit steht nur noch das newline in IFS
...
Dein rsync-Zeug
IFS=$OldIFS # nu setzen wir es wieder zurück
fahre meine Netzwerk-Backups über "rsync". Leider gibt es dabei ein kleines Problem. Sobald im Sicherungspfad ein Verzeichnisname auftaucht, der mindestens aus zwei Worten besteht (getrennt durch Leerzeichen) behandelt rsync jedes Wort als getrenntes Verzeichnis.
Bsp.: Verzeichnisname = "Meine Daten" => "rsync" interpretiert Verzeichnis 1 = "Meine", Verzeichnis 2 = "Daten"
Wie kann ich "rsync" diese Unart abgewöhnen?
Danke schon mal.
Gruß Ralf
Gruss, Christian -- Name: Christian Andretzky | Address: TU Chemnitz | Phone: ++49 +371 531 2130 | Fak. Maschinenbau/Verfahrenstechnik | FAX: ++49 +371 531 2081 | Reichenhainer Str. 70 | mail: Andretzky@MB.TU-Chemnitz.DE | D-09107 Chemnitz | PGP: public key avaliable via public key server | In a world without walls and fences, there is no need for windows and gates | "The Box said 'Windows 95 or better'. - So I installed Linux." |
* Christian Andretzky wrote on Mon, Jan 23, 2006 at 13:50 +0100: [...]
das Verhalten von Linux, daß eine Datei aus zwei Namen "doppelt" ausgeführt wird ist korrekt. Man kann aber sehr wohl einer Datei mehrere Einzelbegriffen zuordnen.
Es gibt kein deartiges Verhalten und es ist nicht korrekt. Und es geht hier sowieso nicht um Linux, sondern um eine Shell. Es ist eine übliche Methode von Shells, whitespace als Trenner zu verwenden. Ausgeführt wird dabei aber nichts (wenn man über die entsprechenden Funktionen wie execve einen Pfad mit Leerzeichen und Zeilenvorschüben angibt, wird die Datei gestartet).
Schreibe statt "Meine Daten" - korrekt "Meine_Daten" und schon ist das Problem gelöst.
Warum ist das korrekt? Auf meinen Windowsmaschinen gibt es immer irgendwo ein "Meine <irgendwas>", z.B. "Dateien" oder "Bilder" - mit Leerzeichen. Wenn man viel mit Shells arbeitet, vermeidet man natürlich Leerzeichen gern, um sich Arbeit und Ärger zu sparen. Manche (wie z.B. ich) mögen Leerzeichen gar nicht, aber auch andere Sonderzeichen (Umlaute, Zeilenvorschübe) nicht. Da "Eigene Dateien" meiner Meinung nach eh Quatsch ist, macht das aber nix :-) Auch Gross- und Kleinschreibung ist so ein Thema: grundsätzlich nenne ich erstmal alles klein, es sei denn, ich möchte etwas bei der Completion bevorzugen und dann nehme ich ausnahmsweise einen Grossbuchstaben vorn.
Das hängt vom Inhalt der shell-Variablem IFS (Internal Field Separator) ab, Das is eine Zeichenkette, die enthält normalerweise Leerzeichen, Tabulator und Newline. Folgerichtig wird das Leerzeichen dan als Trennzeichen interpretiert mit dem bekannten Ergebnis.
Um das zu lösen macht man sinnvollerweise Folgendes:
OldIFS=$IFS # erstmal sichern IFS=' '
Das verschiebt das Problem auf Zeilenvorschübe in Dateinamen, oder? Kleiner Umbruchfehler in einem Script, und schon hat man so eine Datei. Oder man aus Versehen das zweite Singlequote vergessen, Enter gedrückt und als "nichts passiert ist", dann das zweite Singlequote geschrieben und nochmal Enter gedrückt: $ touch 'ein test' $ mv 'ein test' 'C:\noch ein test ' Das erzeugt einen Zeilenvorschub im Dateinamen. Die Datei heisst dann übrigens "C:\noch ein test?", wobei das ? für einen Zeilenvorschub steht. ":" und "\" sind erlaubte Zeichen in Dateinamen. Am besten quotet man einfach korrekt, dann funktioniert es immer (auch mit Zeilenvorschüben und Leerzeichen im Pfad).
fahre meine Netzwerk-Backups über "rsync". Leider gibt es dabei ein kleines Problem. Sobald im Sicherungspfad ein Verzeichnisname auftaucht, der mindestens aus zwei Worten besteht (getrennt durch Leerzeichen) behandelt rsync jedes Wort als getrenntes Verzeichnis.
Bsp.: Verzeichnisname = "Meine Daten" => "rsync" interpretiert Verzeichnis 1 = "Meine", Verzeichnis 2 = "Daten"
Das ist falsch beschrieben, rsync macht alles richtig: $ cd /tmp/ $ mkdir t $ cd /tmp/t $ mkdir -p "a/Eigene Dateien" b $ rsync -av a/ b/ building file list ... done ./ Eigene Dateien/ wrote 60 bytes read 20 bytes 160.00 bytes/sec total size is 0 speedup is 0.00 $ link:/tmp/t # ls a b a: . .. Eigene Dateien b: . .. Eigene Dateien Man sieht, "b/Eigene Dateien" wurde natürlich korrekt synchronisiert; rsync funktioniert natürlich einfach. Auch $ mkdir -p a/Eigene Dateien b funktioniert, es legt "a/Eigene", "Dateien" und "b" an. Die Shell kann ja auch nicht wissen, dass "a/Eigene Dateien" zusammengehört, "b" aber nicht mehr. Das muss man der Shell dann einfach sagen, beispielsweise durch double-quotes " (hier sogar besser mit single-quotes ') oder in dem man das Leerzeichen "escapt": $ mkdir -p a/Eigene\ Dateien b (das macht i.d.R. die Completion-Funktion so) oki, Steffen -- Dieses Schreiben wurde maschinell erstellt, es trägt daher weder Unterschrift noch Siegel.
Hallo Christian, hallo Leute, Am Montag, 23. Januar 2006 13:50 schrieb Christian Andretzky:
ich zitiere mich im Folgenden mal selbst, weil ... die Frage taucht regelmäßig aller Vierteljahre in irgendeinem Zusammenhang auf. Vielleicht wäre es an der Zeit, sowas mal in die FAQ aufzunehmen.
Du bist immer willkommen ;-) 1.3. Wie kann ich mitmachen? http://suse-linux-faq.koehntopp.de/q/q-about-mitmachen.html Gruß Christian Boltz PS: http://learn.to/quote solltest Du bei Gelegenheit auch mal besuchen... -- und *echte* Männer benutzen Linux -- wegen der langen Kommandozeilen ("Meine ist länger als deine!"). Dann muss man nicht mehr Krieg spielen, um zu zeigen, wie hart man ist. -- S. Lauterkorn in suse-talk
participants (7)
-
Christian Andretzky
-
Christian Boltz
-
dadirtyluk
-
Michael Behrens
-
Raffael Schmid
-
Steffen Dettmer
-
Walter Geppert