ls inklusive Pfadangaben

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von lapisa, 24.02.2007.

  1. lapisa

    lapisa Grünschnabel

    Dabei seit:
    27.01.2007
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo!

    Ich schreibe gerade ein Script in dem ich alle Dateien eines Verzeichnisbaums als Eingabe, inklusive des Pfades benötige. Da ls dies meines Wissens nach nicht unterstützt, habe ich folgendes script für die Kommandozeile geschrieben:

    Code:
    Counter=0;
    ddir="*/";
    dddir="*/";
    while [ $Counter -lt 2 ];
     do for i in $(ls -d $ddir);
      do for j in $(ls $i*);
       do echo $i$j;
      done;
     done;
     echo $Counter $ddir;
     let Counter=Counter+1;
     ddir=$ddir$dddir;
    done;
    
    Problem ist, dass jedes Wort einer Datei mit Leerzeichen als einzelne Datei gesehen wird.
    Also würde dir Datei "neue Datei.txt" im Verzeichnis "/Verzeichnis/" als

    Code:
    /Verzeichnis/neue
    /Verzeichnis/Datei.txt
    
    erkannt werden.
    Nicht so toll, weiß jemand was man ändern muss?
    Danke Martin
     
  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, 24.02.2007
    Wolfgang

    Wolfgang Foren Gott

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

    Über das Problem mit hässlichen Zeichen in Dateinamen (inclusive Leerzeichen) wurde hier schon oft diskutiert.
    Mein Tipp dazu ist wie immer:
    1) Immer quoting der Variablen verwenden
    2) find mit -print0 und xargs verwenden

    Code:
    find ./ -maxdepth 1 -type f -print0|xargs -0 -n1
    
    liefert dir alle Dateien im aktuellen Pfad (hier ohne Unterverzeichnisse) als NULL-terminierte Argumente, welche xargs weiterreicht. Mit -0 -n1 wird jedes Argument einzeln behandelt.

    Siehe
    man find man xargs

    Gruß Wolfgang
     
  4. lapisa

    lapisa Grünschnabel

    Dabei seit:
    27.01.2007
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo Wolfgang,

    danke für die Antwort. Dein Code funktioniert wenn ich ihn so verwende.
    Ich möchte die Ausgabe jedoch weiter verarbeiten und versuche mittels
    Code:
    for i in $( find ./ -maxdepth 2 -type f -print0|xargs -0 -n1 ); do echo $i; done;
    
    nun auf jede Datei zuzugreifen. Leider liefert echo $i immer noch die getrennten Dateinamen.

    Gruß
    Martin
     
  5. #4 Wolfgang, 25.02.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ja, damit setzt du das ganze wieder außer Kraft.
    Verwende statt dessen einfach eine pipe auf while read...
    Lass die ganz for i in Schleife weg un pipe das direkt in ein while read.
    Sieh dir auch mal das read in der manpage an.
    Ich denke damit kommst du klar.

    Gruß Wolfgang
     
  6. lapisa

    lapisa Grünschnabel

    Dabei seit:
    27.01.2007
    Beiträge:
    5
    Zustimmungen:
    0
    Pipes sind SEHR nützlich. Ich muss mich damit mal ein wenig auseinandersetzen.
    Danke Wolfgang.

    Gruß
    Martin
     
  7. #6 Wolfgang, 25.02.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Und wenn du nicht gerade Steuerzeichen in deinen dateinamen hast, dann geht das auch ohne -print0

    Code:
    find /path -type f |while read dateiname;
    do
    echo "$dateiname"
    done
    
    Das funktioniert auch mit Leerzeichen.
    read verteilt den gesamten String am IFS geteilt auf die Variablen.
    Sind mehr Argumente als Variablen vorhanden, wird der Rest in die letzte Variable gepackt.
    Da du hier nur eine Variable hast, landet alles darin.
    Bei der Verarbeitung musst du nun auf das Quoting achten.


    Gruß Wolfgang
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

ls inklusive Pfadangaben

Die Seite wird geladen...

ls inklusive Pfadangaben - Ähnliche Themen

  1. Pfadangaben unter Solaris

    Pfadangaben unter Solaris: Hallo, ich habe ein Problem mit "java.lang.NoClassDefFoundError:main". Ich möchte es per Script aufrufen: #!/bin/bash export...