Dateien mit Leerzeichen aus einem Verzeichnis auslesen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
thilo
Beiträge: 241
Registriert: 12.12.2002 22:48:44

Dateien mit Leerzeichen aus einem Verzeichnis auslesen

Beitrag von thilo » 19.04.2004 14:17:08

Hallo!

In einem Verzeichnis habe ich folgende Dateien angelegt:

Code: Alles auswählen

echo "abc" > /home/thilo/Data/datei1
echo "xyz" > /home/thilo/Data/datei2

echo "012" > "/home/thilo/Data/datei 3"
echo "789" > "/home/thilo/Data/datei 4"

echo "ABC" > "/home/thilo/Data/.datei5"
echo "XYZ" > "/home/thilo/Data/.datei6"
Nun möchte ich diese Dateien in einem Skript automatisch verarbeiten. Verzeichnisse sollen nicht beachtet werden!

Dazu habe ich mir folgendes Shell-Skript erstellt:

Code: Alles auswählen

#!/bin/bash

verzeichnis="/home/thilo/Data"

for datei in $verzeichnis/*
do
name=`basename $datei`
if [ -f $verzeichnis/$name ]
then
# Hier wird irgendwas mit der Datei gemacht
# ......
# ......
fi
done
Hier tritt aber das Problem auf, dass Dateien, deren Name mit "." beginnen, nicht berücksichtigt werden.


Anschl. habe ich folgendes probiert:

Code: Alles auswählen

#!/bin/bash

verzeichnis="/home/thilo/Data"

for datei in `ls -A $verzeichnis`
do
if [ -f $verzeichnis/$datei ]
then
# Hier wird irgendwas mit der Datei gemacht
# ......
# ......
fi
done
Nun gibt es das Problem, dass Dateien, die im Namen ein Leerzeichen enthalten, nicht korrekt verarbeitet werden.

Ich möchte aber gerne erreichen, dass
- "normale" Dateien
- Dateien, die mit einem "." beginnen
- Dateien, die ein oder mehrere Leerzeichen enthalten
korrekt verarbeitet werden.

Wie kann man dies erreichen?

Vielen Dank für Ihre Mühe!

Gruß,

Thilo

Benutzeravatar
spiffi
Beiträge: 1128
Registriert: 09.08.2003 19:02:27

Beitrag von spiffi » 19.04.2004 14:33:59

Die erste Variante ergänzt um ein

Code: Alles auswählen

shopt -s dotglob
sollte es tun.
man bash hat geschrieben:When a pattern is used for pathname expansion, the character ``.'' at the start of a name or immediately following a slash must be matched explicitly, unless the shell option dotglob is set.
No language can express every thought unambiguously, least of all this one. -- D. R. Hofstadter

Benutzeravatar
mistersixt
Beiträge: 6601
Registriert: 24.09.2003 14:33:25
Lizenz eigener Beiträge: GNU Free Documentation License

Beitrag von mistersixt » 19.04.2004 14:52:45

Oder sowas wie "find . -type f -name "blablubb" | xargs ls".

Gruss, mistersixt.

LeoManiac
Beiträge: 179
Registriert: 02.10.2003 20:22:30

Beitrag von LeoManiac » 04.09.2005 14:45:53

Hallo,

ich hab ein ähnliches Problem. Ich möchte alle TXT Files auslesen darunter sind welche die haben Leerfelder im Namen aber die werden nicht gefunden...

Code: Alles auswählen

#!/bin/bash

for datei in `find . -type f -name "*.txt" | xargs ls`
do
        echo "TXT FILE: $datei"
done

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 04.09.2005 20:37:05

Hallo LeoManiac,
hilft Dir das etwas?

Code: Alles auswählen

#!/bin/bash

/usr/bin/find . -type f -name "*.txt"| /bin/sed 's/^/TXT FILE: /'
Gruß fuzzy

Antworten