Dateien in Unterordnern finden / Ergebnis in Variable speichern

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von henrik4u, 06.12.2005.

  1. #1 henrik4u, 06.12.2005
    henrik4u

    henrik4u Grünschnabel

    Dabei seit:
    06.12.2005
    Beiträge:
    1
    Zustimmungen:
    0
    Hallo,

    ich bin noch ein totaler Newbie auf Unix, daher kenn ich mich noch nicht wirklich mit der Scriptsprache aus...

    Mein Problem:
    Ich möchte aus diversen Unterverzeichnissen Dateien in ein anderes Verzeichnis kopieren - jedoch nur Dateien, die einem ganz bestimmten Typ entsprechen (z.B. pdf oder doc-Dateien). Manchmal existieren die Dateien, manchmal aber auch nicht und ggf. habe ich auch keine Rechte mir ein Verzeichnis angeben zu lassen, bzw. muss direkt den genauen Pfad angeben.

    Ein Lösungsvorschlag - mit Variablen-Fehler
    Da die Ordner alle einer gleichen Struktur entsprechen und nummeriert sind (fast fortlaufend) habe ich einen Zähler eingebaut. Per Parameter geben ich den Dateityp an, nachdem ich suchen möchte:

    Code:
    mycounter=500
    mydestination= $HOME"/documents/test/"
    while [ $mycounter -le 800 ]
    do     
            mycounter=`expr $mycounter + 1`
            mydocument=$mycounter"/meineordner/dokumente/*."$1
            myfolder="../"$mycounter
            if test -d $myfolder
                    then 
                    theorigin="find $verz" 2> /dev/null 
                    if test -f $theorigin
                            then
                            cp $theorigin $mydestination
                    fi
            fi  
    done
    
    Irgendwie funktioniert das jedoch nicht... hat einer einen Tipp?
     
  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. zeroh

    zeroh Grünschnabel

    Dabei seit:
    07.12.2005
    Beiträge:
    1
    Zustimmungen:
    0
    hey henrik,

    entweder steige ich noch nicht durch die verzeichnisstruktur, die du bearbeiten möchtest, oder meinst du eigentlich statt

    Code:
    theorigin="find $verz" 2> /dev/null
    
    Code:
    theorigin="find $mydocument" 2> /dev/null
    
    und zum testen macht sich auch gut:
    Code:
    #!/bin/bash -x
    
    sonst kann es auch noch die RegExpansion sein, wenn du die verhindern willst, dann nutze die einfachen 'nicht expandierenden' quotes

    viel Glück..
     
  4. #3 Xanti, 07.12.2005
    Zuletzt bearbeitet: 07.12.2005
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Dein $verz ist nirgends definiert. Auf die Schnelle (ungeprüft):

    Code:
    mycounter=500
    mydestination= $HOME"/documents/test/"
    while [ $mycounter -le 800 ]
    do     
            mycounter=`expr $mycounter + 1`
            verz=$mycounter"/meineordner/dokumente"
            myfolder="../"$mycounter
            if test -d $myfolder
            then
                    find $verz -name "*.$1" -exec cp {} $mydestination \;
            fi  
    done
    
    Gruss, Phorus
     
  5. #4 Wolfgang, 07.12.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Wollte Gestern schon was dazu sagen, aber die Tele-hot-Offline hat mich nicht mehr gelassen. ;)

    Macht nix, irgendwann fängt man halt mal an damit.
    Auch du kannst das lernen, ist garnicht so schlimm.
    Ja, erster Tipp:
    Schau dir mal den Unterschied zwischen folgenden zwei Zuweisungen an:
    foo="ls -lA"; echo $foo;
    ls -lA
    foo=$(ls -lA); echo $foo;
    /etc
    /usr
    ...


    Merkst du was ich meine?
    Bei dir betrifft das z.B.
    Wenn du schon so vorgehen willst, dann verwende entweder $(Befehl) oder die Backtics `Befehl` !
    Beides ist gleichwertig, aber Ersteres finde ich übersichtlicher.

    Dann:
    Die Variable $verz taucht hier nirgends auf, ist folglich undef!

    Lösungsvorschlag von mir:
    Wenn deine Verzeichnisse immer mit Ziffern beginnen, dann kannst du in der bash die Datei und Verzeichnis-Expansion nutzen:
    Deshalb geht auch Folgendes, ohne einen Counter :
    Angenommen die Ziffer ist 3-Stellig, und es können Leerzeichen in den Dateien vorkommen.
    (Das sieht bei *.doc ja verdächtig danach aus ;) ).
    Code:
    [b]
    ZIEL="/fo/bar";
    for I in (find [0-9][0-9[0-9]/ -type f \( -iname "*pdf" -o -iname "*doc" \) -print0 2>/dev/null | xargs -0 -n1); do
    echo "cp $I nach $ZIEL"; 
    done
    [/b]
    In der bash Version >3.0 geht auch:
    Code:
    [b]
    ZIEL="/fo/bar";
    for I in (find {0..999}/ -type f \( -iname "*pdf" -o -iname "*doc" \) -print0 2>/dev/null | xargs -0 -n1); do
    echo "cp $I nach $ZIEL"; 
    done
    [/b]
    Das erspart dir das Testen und Zählen, da find nur existierende Dateien in existierenden Ordnern übergibt.

    Das echo einfach entfernen, und die Variablen in Hochkomma setzen.

    HTH
    Gruß Wolfgang
     
  6. Anzeige

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

Dateien in Unterordnern finden / Ergebnis in Variable speichern

Die Seite wird geladen...

Dateien in Unterordnern finden / Ergebnis in Variable speichern - Ähnliche Themen

  1. Bestimmte Dateien aus vielen Unterordnern löschen

    Bestimmte Dateien aus vielen Unterordnern löschen: Hallo, habe mich schon an diversen Stellen schlau gemacht und es mit verschiedenen Ansätzen ausprobiert, aber so richtig will es nicht...
  2. Dateien in Unterordnern entpacken?

    Dateien in Unterordnern entpacken?: Hiho Scripter :) ich stehe gerade vor folgender Situation: Ich habe ca 50 Ordner, in diesen Ordnern gibts 2 Unterordner und darin ist...
  3. zip Dateien in Unterordnern entzippen

    zip Dateien in Unterordnern entzippen: Hallo zusammen, zuerst einmal muss ich euch leider sagen, dass ich (noch) nicht der Skript-Guru bin. Aber was nicht ist, kann ja noch werden....
  4. Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

    Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen: Hallo, ich habe ein Verzeichnis, darin enthalten sind mehrere Dateien. Nun möchte ich alle Dateien (Parameter $1) gegen eine konstante Datei...
  5. Dateien selektieren und zählen

    Dateien selektieren und zählen: Hallo, das ist mein erster Beitrag, bitte entschuldigt, falls nicht alles richtig geschrieben ist. Ich muss meine erste Hausaufgabe als...