Prüfen ob Verzeichnis: Verzeichnis hat leerzeichen??

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von pc-nico, 10.05.2007.

  1. #1 pc-nico, 10.05.2007
    pc-nico

    pc-nico Tripel-As

    Dabei seit:
    15.09.2005
    Beiträge:
    209
    Zustimmungen:
    0
    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
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 10.05.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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
     
  4. #3 pc-nico, 10.05.2007
    pc-nico

    pc-nico Tripel-As

    Dabei seit:
    15.09.2005
    Beiträge:
    209
    Zustimmungen:
    0
    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...)
     
  5. reni

    reni Guest

    IMHO bekommst du den Fehler erst beim Löschen => fehlt das "$var" im Del-Script?
     
  6. #5 Wolfgang, 10.05.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Außerdem fliegt dir diese Zeile um die Ohren, wenn du Leerzeichen in der Variable $verzeichnisse hast:
    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
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 pc-nico, 10.05.2007
    Zuletzt bearbeitet: 10.05.2007
    pc-nico

    pc-nico Tripel-As

    Dabei seit:
    15.09.2005
    Beiträge:
    209
    Zustimmungen:
    0
    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
    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?
     
  9. #7 Wolfgang, 10.05.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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
     
Thema:

Prüfen ob Verzeichnis: Verzeichnis hat leerzeichen??

Die Seite wird geladen...

Prüfen ob Verzeichnis: Verzeichnis hat leerzeichen?? - Ähnliche Themen

  1. mit einem prüfbefehl mehrere verzeichnisse prüfen (z.b ../check_disk -w 1000 -c 2000)

    mit einem prüfbefehl mehrere verzeichnisse prüfen (z.b ../check_disk -w 1000 -c 2000): hallo leute, wie kann ich mit nur einem prüfbefehl mehrere verzeichnisse auf ihre belegung abfragen und dazu noch schwellwerte vergeben ? bis...
  2. Prüfen ob Verzeichnis auf Server existiert

    Prüfen ob Verzeichnis auf Server existiert: Wie kann ich prüfen, ob ein Verzeichnis auf einem Server existiert, habs so gemacht: if [ -d fire:/verzeichnis/ ] then ... fi Das geht aber...
  3. LiMux: Expertengruppe soll mögliche Rückkehr zu Windows prüfen

    LiMux: Expertengruppe soll mögliche Rückkehr zu Windows prüfen: Das von Münchens ehemaligem Oberbürgermeister Christian Ude eigentlich als abgeschlossen erklärte Migrationsprojekt sämtlicher 15000 PCs der...
  4. IF- Anweisen auf einen Bereich prüfen

    IF- Anweisen auf einen Bereich prüfen: Hallo zusammen, kann man in einer IF- Anweisen auf einen Bereich prüfen, z.B. wenn Wert zwischen 7 bis 15 liegt dann … sonst nix :) ? Im...
  5. Prüfen ob ein Datum innerhalb letzten 2 Wochen liegt

    Prüfen ob ein Datum innerhalb letzten 2 Wochen liegt: Hallo, ich bräuchte eine Funktion die prüft ob ein Datum im Format tt.mm.JJJJ innerhalb der letzten 2 Wochen liegt. Oder anders ausgedruckt, ob...