Prüfen ob Verzeichnis: Verzeichnis hat leerzeichen??

P

pc-nico

Tripel-As
Hallo Leute,

ich arbeite an einem Script und scheitere an einem Problem, was eigentlich ganz einfach ist...

ich lese mit ls ein Verzeichnis ein und möchte dann bei jedem Eintrag prüfen ob es sich um eine Verzeichnis handelt.
Leider gibt es bei Verzeichnissen mit Leerzeichen im Namen ein Problem, dort bekomme ich dann die Meldung "Too many Arg..." weil das dann nicht als ein Name angenommen wird...
Hier mal der Scriptansatz:

Code:
ls  /home/user1/deltest | while read verzeichnisse
do
echo $verzeichnisse

#if test -d $verzeichnisse
if [ -d $verzeichnisse ]
then
        echo  $verzeichnisse "Ordner"
else
        echo  $verzeichnisse "ist keine Ordner"
fi
done

Vielleicht könnt ihr mir allgemein eine Seite zur Shellprogrammierung empfehlen?

Danke
 
Hallo
Problem nummer eins kannst du lösen, indem du "$var" verwendest, also Quoting.

Aber wenn du z.B. nur Verzeichnisse suchst, dann geht das auch mit find.

Einen Link zur einer recht guten Einführung für die Bash.

Gruß Wolfgang
 
Hey Wolfgang,

danke für den Tipps mit find, hab ich inzwischen auch raus bekommen...
das mit den Quata hab ich schon probiert, geht leider nicht...

hier mal das Script:
Code:
#!/bin/bash
#ls  /home/user1/deltest | while read verzeichnisse
find /home/user1/deltest -maxdepth 1 -print | while read verzeichnisse

do
echo $verzeichnisse

if [ -d "$verzeichnisse" ]
then
       echo  "JA"
        if [ -f $verzeichnisse/stop.del ]
        then
                echo "STOP-DEL"
        else
                echo "Wird geloecht"
        fi
else
      echo  "NEIN"
fi
done

Als Meldung bei Verzeichnissen mit Leerzeichen bekomme ich:
Code:
/home/user1/deltest/Fun
JA
Wird geloecht
/home/user1/deltest/a nico a
JA
./del.sh: line 11: [: too many arguments
Wird geloecht

Es wird also erkann das es sich um ein Verzeichnis handelt, aber es kommt halt trotzdem diese Fehlermeldung "to many arg..."

ich versteh das gerade nicht so ganz....
(PS: Die Datei stop.del sind noch nicht vorhanden...)
 
IMHO bekommst du den Fehler erst beim Löschen => fehlt das "$var" im Del-Script?
 
Hallo

Außerdem fliegt dir diese Zeile um die Ohren, wenn du Leerzeichen in der Variable $verzeichnisse hast:
if [ -f $verzeichnisse/stop.del ]

Find kann selbst nach Verzeichnissen suchen.
Code:
find /path -maxdepth 1 -type d |while read verz;
do
echo "Ich bin ein Verzeichnis $verz"
done

Und klar, siehe auch den Hinweis von reni.

Gruß Wolfgang
 
ich danke euch für eure hilfe...
das Problem hat sich erledigt, wenn ich mit find direkt nach Verzeichnissen suche (so wie Wolfgang vorgeschlagen hat) umgehe ich den Fehler mit den "too many args"

@reni
es gibt noch kein DEL-SCRIPT!... das kommt erst noch, erstmal muss die erkennung funktionieren

@Wolfgang
Außerdem fliegt dir diese Zeile um die Ohren, wenn du Leerzeichen in der Variable $verzeichnisse hast:
if [ -f $verzeichnisse/stop.del ]
OK, aber die fliegt mir nur um die Ohren, weil ich die Anführungszeichen vergessen habe... hab sie jetzt drin und auch wenn die Datei stop.del in einem Verzeichnis mit Leerzeichen liegt, wird sie erkannt....

Hier die endgültige fassung
Code:
#!/bin/bash
find /home/user1/deltest -maxdepth 1 -type d | while read VERZ
do
echo $VERZ

if [ -f "$VERZ/stop.del" ]
then
        echo "STOP-DEL"
else
        echo "Wird gelöscht"
fi
done

besten dank!
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

frage hinterher... find gibt mir in der oben gepostet variante auch das eigentliche Verzeichnis was im übergeben wurde (/home/user1/deltest) mit in der Liste aus, kann man das unterdrücken?
 
Zuletzt bearbeitet:
Du kannst find sehr genau sagen, was es ausgeben soll.
Schau dir dazu mal in der Manpage die Optionen zu -printf an.

Wenn du find mit relative Pfad startest, bekommst du auch den relativen Pfad per default.
Das ist bei non-interaktiven Scripten allerdings nicht ratsam.
Denn dann musst du dich um die Navigation kümmern.

Auch oft ein Grund für Ärger mit cronjobs. ;)

Gruß Wolfgang
 

Ähnliche Themen

NAS-Drive Mount in Bash-Script über crontab

HandbrakeCLI Shell Skript

Shell Skript beschleunigen

[gelöst] - for file in ... nur für bestimmte Endungen?

verzeichniss suche funktioniert nicht

Zurück
Oben