On Wednesday, 21. November 2001 15:27, Andreas Achtzehn wrote:
Hallo Liste!
Für ein Backup-Script brauche ich dringend eine Lösung. Wir finden die zu backupenden Dateien durch einen find und schreiben die Namen in eine Variable:
VARIABLE=`find /dir -name "*.bck"` Danach wollen dir die Dateien kopieren: for i in $VARIABLE; do cp "$i" /ziel done
find füllt die Variable wunderbar, doch das Problem entsteht, wenn kopiert werden soll. Dateien, die Leerzeichen enthalten, werden durch for als zwei Werte interpretiert.
find schreibt in VARIABLE: /daten/Datei 1.doc cp will kopieren: /daten/Datei 1.doc
[....] Hier ist ein kleines Skript mit dem Du die spaces aus den Dateinamen entfernen kannst. Das ist durchaus sinnvoll. Der Gag besteht im IFS (InputFileSeparator). Wenn Du den so einstellst, daß nur newlines als Trennzeichen gelten klappt es auch mit Deinem Script. ----------------------------------------------------------- #!/bin/bash # # Den InputFieldSeparator sichern <space><tab><newline> # Save the old InputFieldSeparator <space><tab><newline> ALT_IFS=$IFS # Zeilenumbruch in IFS schreiben # Store newline to IFS IFS=' ' # Dateien mit Leerzeichen im Namen finden und in die Schleife # übergeben # Find files with spaces in name and tranfer the list to loop for i in $(find -maxdepth 1 -name "*\ *") ; do # Leerzeichen ersetzen # Replace spaces j=$(echo $i | sed -e s/\ /_/g ) # Kontrollausgabe # output for control # echo $i" -> "$j # umbenennen # rename files mv "$i" "$j" done # alten IFS wieder herstellen # replace old IFS IFS=$ALT_IFS ----------------------------------------------------------------- Gruß Peter