Shell-Script zum auslesen von Dateien aus versch. Verzeichnissen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Redds, 13.04.2010.

  1. Redds

    Redds Grünschnabel

    Dabei seit:
    13.04.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo Leute,

    ich habe ein Problem wo ich mit meinem Wissensstand einfach nicht weiterkomme:

    Ich habe etwa 3000 verschiedene Verzeichnisse in /root/home/bla
    diese sind immer 4-stellige Nummer, also z.b. 1234, 3333, 5656 (...)

    in jedem Verzeichnis befinden sich .error und .archived Dateien welche so aufgebaut sind:

    AE1234_1234__982356BATBAT_F0_164.pdf.edoc.error
    oder
    AE1234_1234__643256LALALA_F0_20090627_015301.TIF.edoc.20080627.135303.156.archived

    -------------------------------------JAHR-MM-TT---HHMMSS (milli sek)
    Wurde die Datei archiviert so ist 2009--06--27--. 16 33 09 .124. das Datum.

    AE bleibt immer gleich und bekommt den VZ-Namen angehängt, 1234 ist der VZ-Name, 643256=Nummer BATBAT=Typ
    In einem anderem VZ heißen die Dateien dann z.b.
    AE5555_5555_234322XDKJQE(.....)

    So, ich muss nun aus allen Verzeichnissen die Dateien, die mit .archived enden

    1. auslesen
    2. eine (z.b. eintraege.txt datei) in dem Verzeichnis erstellen und die eintrage geordnet auflisten z.b.

    --AE------VZ-----Nummer---Typ-------Datum-------Uhrzeit
    AE1234---1234---643256---LALALA---2009 06 27---16 33 09
    AE1234---1234---123321---BLABLA---2010 03 12---12 21 19

    (Rest kann weggelassen werden.)
    Die "-" sind natürlich eigentlich Leerzeichen aber kann auch anders aufgebaut werden hauptsache es ist übersichtlicht :)

    und 3. anschließend alle .archived Dateien aus dem Verzeichnis löschen.


    Im Grunde also nur eine schönere Auflistung, wenn ich in root/home/bla/1234 "ll -a" eingebe erhalte ich etwa 150 dieser Dateien(oder Einträge) ich möchte nun das bei "ll -a" nur noch eintraege.txt angezeigt wird.

    Öffnet man diese .txt Datei so sollen die 150 Einträge nach der obigen gliederung aufgelistet werden.

    Ich hoffe ihr versteht was ich meine und könnt mir helfen.

    Liebe Grüße,
    Redds
     
  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 tennessee, 13.04.2010
    Zuletzt bearbeitet: 13.04.2010
    tennessee

    tennessee Linuxfan

    Dabei seit:
    22.04.2006
    Beiträge:
    134
    Zustimmungen:
    0
    Code:
    #!/bin/bash
    
    ls -ltr /root/home/bla > liste.txt
    
    while read a 
    do
    ll -a  $ | awk {'print $9'} 
    
    done <liste.txt
    
    irgendwie so in der Richtung?
     
  4. #3 tuxlover, 13.04.2010
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    nein so richtig verstehe ich nicht, was du meinst. bla und laber ist eben nicht sehr konkret.

    aber du könntest vielleicht find meinen

    find /root/home/bla -t f -name *txt --exec <foo-beffehl> {};


    ansonsten vielleicht nochmal deutlicher ;)
     
  5. #4 bytepool, 13.04.2010
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    und dann am besten noch System und Shell benennen, erklaeren wonach die Eintraege sortiert sein sollen, und wie die Verzeichnisstruktur verschachtelt ist (alles ein level tief?).

    Ahja, und am besten nicht davon ausgehen, dass andere Leute die selben aliase wie du benutzen, ich meine ll ist haeufig ein alias auf 'ls -l', aber ich arbeite fast komplett ohne aliase, weiss es also nicht sicher. Ein Programm ll ist mir nicht bekannt.

    mfg,
    bytepool
     
  6. #6 tuxlover, 13.04.2010
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
  7. Redds

    Redds Grünschnabel

    Dabei seit:
    13.04.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Hey, ja das sieht schon gar nicht schlecht aus.

    Also nochmal kurz:

    3000 Verzeichnisse in dem Verzeichnis: /root/home/bla
    Die Verzeichnisse sind immer 4 stellige Ziffern wie 1234, 4444 ,5214 usw.
    In jedem Verzeichniss sind 1-200 Einträge (wie oben beschrieben) die entweder mit .error oder mit .archived enden.

    Nun gilt es, in jedem dieser 3000 Verzeichnisse ALLE .archived Einträge in eine liste in dem jeweiligen Verzeichnis zu schreiben und die .archived Einträge anschließend aus dem VZ löschen.

    Hoffe ihr versteht das jetzt etwas besser.


    Und sorry für das Doppelposting, dachte mehrere Ideen sind besser als eine..
     
  8. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.056
    Zustimmungen:
    8
    Du suchst
    Code:
    man find
    man echo
    man basename
    man dirname
    man rm
     
  9. Redds

    Redds Grünschnabel

    Dabei seit:
    13.04.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Code:
    find /root/home/bla *.archived >> liste.ini
    rm /root/home/bla *.archived
    Damit würde ich ja schonmal alle .txt dateien aus dem VZ bla in die liste.ini geschrieben bekommen. Nur er schreibt dann den ganzen Pfad in die ini...
     
  10. HBtux

    HBtux Linuxer

    Dabei seit:
    13.04.2010
    Beiträge:
    72
    Zustimmungen:
    0
    Ort:
    $HOME
    Ich hoffe ich habe Deine Aufgabe richtig verstanden....

    Versuche es mal damit....
    Code:
    [FONT="Courier New"]#!/bin/bash
    
    echo "  AE      VZ     Nummer   Typ       Datum       Uhrzeit"
    
    cd /root/home/bla/
    find . -name "*archived" -exec ls -l --full-time {} \; | while read AKT_ZEILE; do
    
            FULLDATEINAME=`echo "$AKT_ZEILE" | cut -d" " -f10`
            VZ=`echo "$FULLDATEINAME" | cut -d"/" -f2`
            DATEINAME=`echo "$FULLDATEINAME" | cut -d"/" -f3`
    
            AE=`echo $DATEINAME | cut -b 1-6`
            NUMMER=`echo $DATEINAME | cut -b 14-19`
            TYP=`echo $DATEINAME | cut -b 20-25`
    
            DATUM=`echo "$AKT_ZEILE" | cut -d" " -f7 | tr "-" " "`
            UHRZEIT=`echo "$AKT_ZEILE" | cut -d" " -f8 | cut -d"." -f1 | tr ":" " "`
    
    
            echo "$AE   $VZ   $NUMMER   $TYP   $DATUM   $UHRZEIT"
    done[/FONT]
    
    ergibt folgende Ausgabe....
    Code:
    [FONT="Courier New"]HBtux:/tmp # ./test1.sh
      AE      VZ     Nummer   Typ       Datum       Uhrzeit
    AE1234   1111   643256   LALALA   2010 04 13   22 04 39
    AE5544   1155   643256   LALALA   2010 04 13   22 30 33
    AE5544   1155   643256   BATBAT   2010 04 13   22 57 53
    AE5544   1155   123456   TESTTT   2010 04 13   22 58 31[/FONT]
    
     
  11. #11 Redds, 14.04.2010
    Zuletzt bearbeitet: 14.04.2010
    Redds

    Redds Grünschnabel

    Dabei seit:
    13.04.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Hey HBtux,

    super, vielen vielen Dank für deine Hilfe :)
    Es läuft soweit, wenn ich noch eine Frage habe melde ich mich noch einmal.

    Edit:

    Ok, nun werden alle Einträge aus einem Ordner in eine .txt Datei geschrieben.
    Nur wie schaffe ich es, dass das Script für JEDEN Ordner eine .txt Datei in genau diesem Ordner anlegt?


    Also es sind ja 3000 Ordner, in jedem Ordner sind bis zu ~200 Einträge.

    Ziel: nur noch 3000 Ordner, in jedem Ordner 0 Einträge (bzw die .error eintrg. sollen erhalten bleiben) und 1 .txt Datei in der die Auflistung der Einträge erfolgt [dies ist ja schon Fertig]
     
  12. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  13. #12 HBtux, 14.04.2010
    Zuletzt bearbeitet: 14.04.2010
    HBtux

    HBtux Linuxer

    Dabei seit:
    13.04.2010
    Beiträge:
    72
    Zustimmungen:
    0
    Ort:
    $HOME
    Einfach die echo-Ausgaben wie folgt in die Text-Dateien umleiten.....
    (ich habe die Änderungen zu dem ersten Script fett Markiert.)
    Code:
    [FONT="Courier New"]#!/bin/bash
    
    cd /root/home/bla/
    find . -name "*archived" -exec ls -l --full-time {} \; | while read AKT_ZEILE; do
    
            FULLDATEINAME=`echo "$AKT_ZEILE" | cut -d" " [B]-f10-[/B]`
            VZ=`echo "$FULLDATEINAME" | cut -d"/" -f2`
            DATEINAME=`echo "$FULLDATEINAME" | cut -d"/" -f3`
            AE=`echo $DATEINAME | cut -b 1-6`
            NUMMER=`echo $DATEINAME | cut -b 14-19`
            TYP=`echo $DATEINAME | cut -b 20-25`
            DATUM=`echo "$AKT_ZEILE" | cut -d" " -f7 | tr "-" " "`
            UHRZEIT=`echo "$AKT_ZEILE" | cut -d" " -f8 | cut -d"." -f1 | tr ":" " "`
    
    [B]        LOGFILE="$VZ/eintraege.txt"
    
            [ ! -f "$LOGFILE" ] && echo "  AE      VZ     Nummer   Typ       Datum       Uhrzeit" >> $LOGFILE[/B]
    
            echo "$AE   $VZ   $NUMMER   $TYP   $DATUM   $UHRZEIT"[B] >> $LOGFILE
    
            # hier kannst Du den Löschbefehl eintragen bzw. das echo vor dem Befehl entfernen....
            # Bitte vorher die Daten sichern bzw. den Befehl prüfen....!
            echo  rm -f "$FULLDATEINAME"
    [/B]
    done
    [/FONT]
    
    *** EDIT **** 21:21 Uhr *****************
    Ich habe das Script noch mal etwas geändert....
    Abfrage ob $LOGFILE bereits existiert - wenn Nein dann Header in Datei schreiben
    *****************************
     
  14. Redds

    Redds Grünschnabel

    Dabei seit:
    13.04.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Hey HBtux,

    danke danke danke nochmal!!
    Es läuft jetzt wirklich, ich habe noch ein paar kleine Änderungen vorgenommen, da manche Einträge anscheinend auch anders aufgebaut waren (wusste ich vorher nicht).
    Aber jetzt läufts :))
    Echt Super, danke für die Hilfe und geopferte Zeit von dir.
     
Thema: Shell-Script zum auslesen von Dateien aus versch. Verzeichnissen
Besucher kamen mit folgenden Suchen
  1. bash verzeichnis auslesen

    ,
  2. shell script ordner abfragen

Die Seite wird geladen...

Shell-Script zum auslesen von Dateien aus versch. Verzeichnissen - Ähnliche Themen

  1. Shell-Script > neustes Aenderungsdatum von mehreren Dateien auslesen

    Shell-Script > neustes Aenderungsdatum von mehreren Dateien auslesen: Hallo zusammen, Dies ist meiner erster Post, mit Boardsuche wurde ich leider nicht fündig, aber ich hoffe, jemand weiss Rat :)! Folgende...
  2. shell-script mit plink starten

    shell-script mit plink starten: Hallo, auf meinem kleinen QNAP-Backupserver möchte ich von meinem Windows 7 PC mittels Windows-Batch ein kleines shell script starten. So sieht...
  3. Hilfe bei Shell-Scripting

    Hilfe bei Shell-Scripting: Moinsen! Ich soll für ein Labor im Studium folgende Skripte schreiben und bräuchte da etwas Unterstützung! 1. frename.sh <string> Hängt...
  4. Welches shell-script ist ausführbar?

    Welches shell-script ist ausführbar?: Hallo Community, Dies ist mehr eine Verständnisfrage, weil ich ich nicht ganz Durchblicke! Ich habe Google Earth via einem *.deb Paket...
  5. Shell-Script was Config speziell bearbeitet

    Shell-Script was Config speziell bearbeitet: Hallo, ich Suche ein Shellscript, was mittels aufruf eine configdatei bearbeitet. Der Configfile sieht z.b. so aus: subnet 192.168.1.0...