ashi-75
Goto Top

Leerzeichen in Datei- und Verzeichnisnamen unter unix shell-skript

hallo,
ich habe höchst wahrscheinlich ein einfaches Problem.Ich bin leider Entwickler, und muss mich um meine Dateien kümmern.
Folgendes Problem nun:
Aus platzgründen möchte ich alle Text und sostige Dateien komprimieren.Ich hole mir per find alle Dateien incl. Pfade und möchte diese nun per for Schleife komprimieren und schließend löschen. Hier ist der Code:

echo "hallo geben Sie den Pfad an, indem die TXT-Dateien zum komprimieren liegen"
read answer


find $answer -name "*.TXT" -print -o -name "*.txt" -o -name "*.DAT" -o -name "*.dat" -print > pfad ;

for name in 'cat pfad'
do
'komprimiere und lösche'
done:


Das Problem ist nun, dass die For-Schleife die Leerzeichen als Trennmarke nimmt und somit das Ganze nicht funktioniert.
Hat jemand eine Idee?
Bedanke mich schon mal.
Grüsse

Content-ID: 46166

Url: https://administrator.de/forum/leerzeichen-in-datei-und-verzeichnisnamen-unter-unix-shell-skript-46166.html

Ausgedruckt am: 09.04.2025 um 19:04 Uhr

BartSimpson
BartSimpson 15.12.2006 um 10:55:01 Uhr
Goto Top
haste du es schon mal versucht den Leerzeichen ein \ voran zu stellen?
cybermarc
cybermarc 20.12.2006 um 14:30:36 Uhr
Goto Top
Dein problem ist der normale print. Nimm den printf, damit hat eine bessere Ausgabe, also z.B.
find $answer -type f -name "*.[Tt][xX][tT]" -printf "%P"

printf kann noch mehr infos ausgeben, mittels regexp kannst auch gleich beim Suffix nach unterschiedlichen Schreibweisen schauen, z.B: .TXT, .txt, .Txt

Gruß, Marcus
ashi-75
ashi-75 20.12.2006 um 15:12:13 Uhr
Goto Top
Hallo,
ich habe es probiert, aber leider erfolglos. Die print-Anweisungen können auch weggelassen werden. Das Problem bleibt jedoch bestehen, wenn ich via For-Schleife über diese Liste, die ich vorher per find-Befehl erstellt habe, iteriere. Dabei wird jedes Leerzeichen als mögliche Trennzeichen gelesen.
Vielleicht eine Idee?
Grüsse
cybermarc
cybermarc 20.12.2006 um 20:10:59 Uhr
Goto Top
Ahh, ok. Ich habe das bei meinem Backup-Script so gelöst:

cat $LISTFILE | while read line
do
F_NAME=`printf "$line" | cut -d, -f2 | sed -e 's/"//g'`
            1. mach was mit $F_NAME
            done


            wobei mein Listfile den Aufbau

            Dateigroesse in MB, "Dateiname mit Pfad und blanks"
            Dateigroesse in MB, "Naechster dateiname mit Pfad und blanks"

            hatte. Da Du nur den Dateinamen ohne quotes im Listfile hast, würde der
            Ausdruck zum auslesen einfach nur
            F_NAME=`printf "$line\n"`
            bzw.
            printf "Mach was mit Datei $line\n"

            lauten.