Anzeige:
Ergebnis 1 bis 12 von 12

Thema: Verzeichnissinhalte zentral sammeln...

  1. #1
    Registrierter Benutzer
    Registriert seit
    31.01.2002
    Ort
    bei Bremen
    Beiträge
    52

    Talking Verzeichnissinhalte zentral sammeln...

    Hallo...

    Ich habe Fedora und hab ein Jahr lang systematisch einige Datenreihen total unuebersichtlich gesammelt:

    Im Verzeichniss /backup/datenplots befinden sich weitere Unterverzeichnisse in denen sich weitere Verzeichnisse befinden koennen. Die Verzeichnisse haben auch meist verschiedene Namen wie "Viskositaet_040915" oder "ionenlauf_050418" Ausserdem existieren einige Verzeichnisse doppelt aber mit anderem inhalt, der jedoch gleiche Dateinamen hat.

    Was ich nun braeuchte ist ein script welches von allen Dateien in den Verzeichnissen in einem anderen erstellten verzeichniss softlinks anlegt, und wenn ein verzeichniss doppelt bestehen sollte, muessen die softlinks numerisch durchnummeriert werden.


    So, das hat keiner verstanden daher nochmal, es gibt das Verzeichniss mit unterverzeichnissen:

    /backup/datenplots
    /backup/datenplots/ionisierung/041210ionenlauf 20Dateien
    /backup/datenplots/rotation/051105viskositaet 15Dateien
    /backup/datenplots/rotation/041210ionenlauf 18Dateien

    Wie ihr seht gibt es das Verzeichniss 041210ionenlauf zweimal.

    nun soll ein script die daten in den verzeichnissen auslesen und softlinks anlegen:

    /backup/softlinks/041210ionenlauf/041210ionenlauf_001.txt
    /backup/softlinks/041210ionenlauf/041210ionenlauf_002.txt
    /backup/softlinks/041210ionenlauf/041210ionenlauf_003.txt
    .
    .
    .
    /backup/softlinks/041210ionenlauf/041210ionenlauf_038.txt
    /backup/softlinks/051105viskositaet/051105viskositaet_001.txt
    .
    .
    /backup/softlinks/051105viskositaet/051105viskositaet_015.txt


    Ihr seht das die Daten aus 041210ionenlauf alle in einem gemeinsamen verzeichniss gelandet sind und alle sauber durchnummeriert sind, entsprechent ihres Herkunftsverzeichnisses.


    Ich hoffe ich konnte mich einigermassen ausdruecken. Das sind ca. 800 Verzeichnisse und unterverzeichnisse mit ca. 15.000 Dateien. Das waere Toedlich es manuell zu versuchen. da schleichen sich spaetestens nach 10 Verzeichnissen routinefehler ein.

    In diesem Sinne:

    :D The Painkiller :D

    Wir sind Figuren in einem Spiel...

    Bitte beachtet zu diesem Posting meine Allgemeinen Geschäftsbedingungen

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Hmm, und jetzt? Im AGB dieses Forums steht nur was von Programmierforum und nix von "doWhatIWant-Funktion-Implementierer..."

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer
    Registriert seit
    31.01.2002
    Ort
    bei Bremen
    Beiträge
    52
    Naja... diese Funktion muss ja auch Programmiert werden.

    Ich weiss aber was du meinst, das einzige was ich selber kann ist per cp sachen von a nach b verschieben und so kleinkram. Beim Rest braeuchte ich hilfe
    In diesem Sinne:

    :D The Painkiller :D

    Wir sind Figuren in einem Spiel...

    Bitte beachtet zu diesem Posting meine Allgemeinen Geschäftsbedingungen

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Eigentlich nicht soo ne Sache, sollte mit find zu erschlagen sein vermute ich.

    Kann es da Dateinamenkollisionen gehen und sollte man damit irgendwie umgehen?
    Also das in zwei 041210ionenlauf-Verzeichnissen Dateien gleichen Namens sind? Oder soll das Script die selber einfach durchnumerieren ungeachtet dessen ob es eine Datei mehrmals gibt?

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    Registrierter Benutzer
    Registriert seit
    31.01.2002
    Ort
    bei Bremen
    Beiträge
    52
    Hallo...

    Es kann in den zwei "041210ionenlauf" verzeichnissen durchaus auch gleiche Dateinamen geben. Die haben allerdings andere Inhalte, daher sollten alle Dateien erhalten bleiben und nur simpel hintereinander durchnummeriert in ein gemeinsames "041210ionenlauf" Verzeichniss gelinkt werden.
    In diesem Sinne:

    :D The Painkiller :D

    Wir sind Figuren in einem Spiel...

    Bitte beachtet zu diesem Posting meine Allgemeinen Geschäftsbedingungen

  6. #6
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Mal sowas fürn Anfang - weiss aber nicht obs 100%ig hinhaut so wie dus möchtest aber es scheint was in die Richtung zu tun:

    Code:
    IFS="
    "
    
    LINKDIR=/tmp/links
    FILEDIR=/home/peschmae/test
    
    cd $FILEDIR
    
    find -type f  | while read f; do
      LB=$(echo $(dirname $f) | sed "s#.*/##")
    
      for LN in $(seq -w 1 999); do
        if [ ! -h $LINKDIR/$LB/${LB}_${LN}.txt ] ; then
           break
        fi
      done
    
      mkdirhier $LINKDIR/$LB
      ln -s $f $LINKDIR/$LB/${LB}_${LN}.txt
    done
    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  7. #7
    Registrierter Benutzer
    Registriert seit
    31.01.2002
    Ort
    bei Bremen
    Beiträge
    52

    Talking

    Danke... Ich werde es mal testen.
    In diesem Sinne:

    :D The Painkiller :D

    Wir sind Figuren in einem Spiel...

    Bitte beachtet zu diesem Posting meine Allgemeinen Geschäftsbedingungen

  8. #8
    Registrierter Benutzer
    Registriert seit
    31.01.2002
    Ort
    bei Bremen
    Beiträge
    52

    Talking

    Hallo...

    Ich habe das script getestet und mir ist aufgefallen, das die Softlinks alle falschgelegt werden. Sie beziehen sich auf eine relative Position der Links zu den Quelldaten. So verweisst der Link von "/backup/test/test1/ionentest004/041210ionenlauf.txt" im verzeichniss "/tmp/link" nach "/test./test1/ionentest004/041210ionenlauf.txt"

    Ich habe das Script ein wenig umgebogen:

    Code:
    rm -r /tmp/links/*
    rm /backup/test.
    
    IFS="
    "
    
    LINKDIR=/tmp/links
    FILEDIR=/backup/test/
    
    cd $FILEDIR
    
    find -type f  | while read f; do
      LB=$(echo $(dirname $f) | sed "s#.*/##")
    
      for LN in $(seq -w 1 999); do
        if [ ! -h $LINKDIR/$LB/${LB}_${LN}.txt ] ; then
           break
        fi
      done
    
      mkdirhier $LINKDIR/$LB
      ln -s $FILEDIR$f $LINKDIR/$LB/${LB}_${LN}.txt
    done
    
    ln -s /backup/test /backup/test.
    Da ich oefters getestet habe, hab ich zuerst alte links weg und das Verzeichniss /backup/test. geloescht. Sonst alles wie gehabt bis hier:

    ln -s $FILEDIR$f $LINKDIR/$LB/${LB}_${LN}.txt

    Vor der eingabevariable $f ist noch das Filedir vorgehaengt, dadurch wird die Quelldatei nicht bei "/test./test1/ionentest004/041210ionenlauf.txt" gesucht sondern in "/backup/test./test1/ionentest004/041210ionenlauf.txt" . Durch

    ln -s /backup/test /backup/test.

    erzeuge ich dann noch einen link /backup/test. So werden die Quelldateien auch gefunden.

    Soweit funktioniert das script wunderbar. Ich hab damit vorhin in ca. 11min 16.200 Dateien mit Softlinks versehen. Das mit den Verzeichnissen und numerische Folge funktioniert wunderbar.

    Das einzige was stoert ist der letzte Softlink um /backup/test. zu erzeugen. Das macht das ganze etwas "unsauber".


    Aber endlich blicke ich bei den Daten mal wieder durch Danke dir bisher
    In diesem Sinne:

    :D The Painkiller :D

    Wir sind Figuren in einem Spiel...

    Bitte beachtet zu diesem Posting meine Allgemeinen Geschäftsbedingungen

  9. #9
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Ich verstehe die
    ln -s /backup/test /backup/test.
    Geschichte nicht ganz.

    Ausserdem würde ich wenn ich dich wäre LINKDIR anderswo hinsetzen als auf /tmp - bei mir zumindest (und auch auf den anderen Linuxen d ie ich kenne) wird das nämlich bei jedem Booten geleert

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  10. #10
    Registrierter Benutzer
    Registriert seit
    31.01.2002
    Ort
    bei Bremen
    Beiträge
    52

    Talking

    Das ist ja auch nur ein test. Natuerlich liegen die Links jetzt nicht in /tmp

    Zu dem ln:

    Das script legt so wie es von dir kommt, einen Verzeiss vom Link nach:

    /test./test1/ionentest004/041210ionenlauf.txt

    Weil die Quelldatei aber in

    /backup/test/test1/ionentest004/041210ionenlauf.txt

    liegt, habe ich

    ln -s $FILEDIR$f $LINKDIR/$LB/${LB}_${LN}.txt

    so abgeaendert. Jetzt weisst der link nach:

    "/backup/test./test1/ionentest004/041210ionenlauf.txt

    Also immer ein Punkt am Ende des FILEDIR. Aber weil ich kein "/backup/test." habe, sondern nur "/backup/test" habe lege ich einen weiteren Link:

    ln -s /backup/test /backup/test.

    gelegt. So wird das Problem ueberbrueckt.

    Noch fragen?
    In diesem Sinne:

    :D The Painkiller :D

    Wir sind Figuren in einem Spiel...

    Bitte beachtet zu diesem Posting meine Allgemeinen Geschäftsbedingungen

  11. #11
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Wenn du statt in den Ordner zu wechseln mit
    cd $FILEDIR

    nachher beim Find den Ordner angibst:
    find $FILEDIR -type f

    dann ist im Output von find jeweils der absolute Pfad drin und die Sache sollte kein Problem mehr sein.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  12. #12
    Registrierter Benutzer
    Registriert seit
    31.01.2002
    Ort
    bei Bremen
    Beiträge
    52

    Talking

    Hallo...

    Es funktioniert einwandfrei. Dankeschoen
    In diesem Sinne:

    :D The Painkiller :D

    Wir sind Figuren in einem Spiel...

    Bitte beachtet zu diesem Posting meine Allgemeinen Geschäftsbedingungen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •