Filesystemänderungen und DIFF

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Sir Auron, 24.10.2004.

  1. #1 Sir Auron, 24.10.2004
    Sir Auron

    Sir Auron Routinier

    Dabei seit:
    26.04.2004
    Beiträge:
    482
    Zustimmungen:
    0
    Also ich generiere mit find 2 Listen von meinem Dateisystem. Nun möchte ich jeweils eine Liste mit gelöschten (d.h. einfach sie sind nicht mehr am Platz wie bei Liste1) und neuen (d.h. einfach sie sind neu in einem Verzeichnis) Dateien. Mich interessiert nicht wie und wann sie bewegt wuden, sondern nur ob sie noch im Verzeichnis sind oder nicht und ob neue Dateien im Verzeichnis sind. Naja wie mache ich das? Ich habe es schon mit diff versucht, aber nach mehr als 40 Versuchen habe ich es dann aufgegeben. Hat jemand eine Idee wie man das realisieren könnte?
     
  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. khs

    khs Routinier

    Dabei seit:
    19.08.2004
    Beiträge:
    408
    Zustimmungen:
    0
    Was ist gegen diff einzuwenden?
    Die Dateien mit < sind geloescht, die mit > sind dazugekommen bzw. haben sich geaendert (bei "diff <alt> <neu>").
    Wenn du das Ganze mit --side-by-side und --suppress-common-lines ausgibst, wird es sogar richtig uebersichtlich. Was in den Listen drin ist, entscheidest du ja sowieso mit den ls-Optionen (oder wo kommt die Liste her?). Und wenns mehrere Verzeichnisse sein sollen, sollte sich doch mit grep und cut einiges bewegen lassen, oder?

    -khs, der ueberlegt, ob tripwire das nicht auch koennte...
     
  4. #3 Sir Auron, 24.10.2004
    Sir Auron

    Sir Auron Routinier

    Dabei seit:
    26.04.2004
    Beiträge:
    482
    Zustimmungen:
    0
    Ich will ja 2 Dateien mit neuen (siehe Definition im 1. Post) und gelöschten (siehe Definition im 1. Post) Dateien.
     
  5. #4 Sir Auron, 24.10.2004
    Sir Auron

    Sir Auron Routinier

    Dabei seit:
    26.04.2004
    Beiträge:
    482
    Zustimmungen:
    0
    No idea?
     
  6. #5 Sir Auron, 24.10.2004
    Sir Auron

    Sir Auron Routinier

    Dabei seit:
    26.04.2004
    Beiträge:
    482
    Zustimmungen:
    0
    Wirklich keine Idee? Ich bräuchte das sehr dringend!
     
  7. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    Dann poste doch mal nen kleinen Auszug wie die Dateien aussehen bzw. den Befehl wie Du sie erstellst. Vielleicht kann man ja da schon optimieren.
     
  8. #7 bluelupo, 25.10.2004
    Zuletzt bearbeitet: 25.10.2004
    bluelupo

    bluelupo LangLinuxNutzer

    Dabei seit:
    23.11.2003
    Beiträge:
    119
    Zustimmungen:
    0
    Ort:
    Nahe der bayerischen Alpen
    Hi Sir Auron,

    erzeuge mit Hilfe von "find" eine Dateiliste vom aktuellen Stand und leite sie in eine Datei (dateiliste1.txt) um. Zu einen späteren Zeitpunkt lässt du den "find" nochmal laufen und wieder Umleiten in eine Datei (dateiliste2.txt).

    Hier ein Beispiel des "find" vom Verzeichnis /home inkl. aller Unterverzeichnisse
    Code:
    # findet alle Verzeichnisse und Dateien
    find /home -name "*" -print > /tmp/dateiliste1.txt
    # Oder so: findet nur Dateien 
    find /home -name "*" -type f -print > /tmp/dateiliste1.txt 
    

    Dann nim das nachstehende Script (Name: filediff.sh) und rufe es so auf:
    Code:
    /usr/local/bin/filediff.sh /tmp/dateiliste1.txt /tmp/dateiliste2.txt
    
    Code:
    # Script ablegen in /usr/local/bin als filediff.sh
    if [ $# -ne 2 ]; then
            echo ""
            echo "Usage: $0 <oldfile> <newfile>"
            echo ""
            exit 1
    fi
    
    OLDFILENAME=$1
    NEWFILENAME=$2
    DIFF_FILE=/tmp/sdiff.txt
    ADDED=/tmp/added.txt
    DELETED=/tmp/deleted.txt
    
    sdiff $OLDFILENAME $NEWFILENAME | egrep '(>|<)' > $DIFF_FILE
    awk '{print $1" "$2}' $DIFF_FILE | awk '{if ($1==">") {print "added: "$2}}' $DIFF_FILE > $ADDED
    awk '{print $1" "$2}' $DIFF_FILE | awk '{if ($2=="<") {print "deleted: "$1}}' $DIFF_FILE > $DELETED
    
    rm $DIFF_FILE
    
    echo "See new files in $ADDED"
    echo "See deleted files in $DELETED"
    # EOF
    
    
    Dann liegen im /tmp Verzeichnis zwei neue Dateien.....

    added.txt
    deleted.txt

    ....mit den neuen bzw. gelöschten Dateien jeweils in einer seperaten Datei.

    Wenn das mit dem "find" noch automatisieren willst kannst du drei Cronjobs anlegen (als root). An den geraden/ungeraden Wochentagen läuft der find, an den geraden auch das Script filediff.sh. So hast jeden Tag um 19:30 Uhr zwei neue Files (added.txt und deleted.txt).

    Code:
    00 19 * * 1,3,5 /usr/bin/find /home -name "*" -print > /tmp/dateiliste1.txt
    00 19 * * 0,2,4,6 /usr/bin/find /home -name "*" -print > /tmp/dateiliste2.txt
    30 19 * * 0,2,4,6 /usr/local/bin/filediff.sh /tmp/dateiliste1.txt /tmp/dateiliste2.txt
    
     
  9. #8 Sir Auron, 25.10.2004
    Sir Auron

    Sir Auron Routinier

    Dabei seit:
    26.04.2004
    Beiträge:
    482
    Zustimmungen:
    0
    Erstmal danke! Aber eine C Implementierung fällt dir auch nicht ein oder?
     
  10. #9 bluelupo, 25.10.2004
    bluelupo

    bluelupo LangLinuxNutzer

    Dabei seit:
    23.11.2003
    Beiträge:
    119
    Zustimmungen:
    0
    Ort:
    Nahe der bayerischen Alpen
    Hi,
    leider kann ich C nicht. Ausserdem sind wir ja hier im Script-Forum ;-)
     
  11. #10 Sir Auron, 25.10.2004
    Sir Auron

    Sir Auron Routinier

    Dabei seit:
    26.04.2004
    Beiträge:
    482
    Zustimmungen:
    0
    Schade!
    Könnest du mir sagen wie ich das mit Regular Expressions hinbekommen könnte?
     
  12. #11 bluelupo, 26.10.2004
    bluelupo

    bluelupo LangLinuxNutzer

    Dabei seit:
    23.11.2003
    Beiträge:
    119
    Zustimmungen:
    0
    Ort:
    Nahe der bayerischen Alpen
    Hi Sir Auron,

    das Problem das du hier hast sind deine zwei Ausgabefiles das läßt sich so nur über ein Script realisieren. Du kannst natürlich das zu einen Befehl per Pipes zusammenhängen. Die Ausgabe hast du dann am Bildschirm oder in einer Ausagedatei.

    Code:
    sdiff liste4 liste5|egrep '(>|<)'|awk '{print $1" "$2}'|awk '{if ($1==">") {print "neu hinzu: "$2} else {if ($2=="<") {print "geloescht: "$1}}}'
    
    # oder so
    
    sdiff liste4 liste5|egrep '(>|<)'|awk '{print $1" "$2}'|awk '{if ($1==">") {print "neu hinzu: "$2} else {if ($2=="<") {print "geloescht: "$1}}}' > output.txt
    
     
  13. #12 Sir Auron, 26.10.2004
    Sir Auron

    Sir Auron Routinier

    Dabei seit:
    26.04.2004
    Beiträge:
    482
    Zustimmungen:
    0
    Danke für deine Bemühungen, aber ich fände es komfortabler Regular Expressions zu benutzen (schon wegen des Geschwindigkeit). Fällt dir da eine Lösung ein?
     
  14. #13 bluelupo, 27.10.2004
    bluelupo

    bluelupo LangLinuxNutzer

    Dabei seit:
    23.11.2003
    Beiträge:
    119
    Zustimmungen:
    0
    Ort:
    Nahe der bayerischen Alpen
    Hi,

    ich weiß nicht so ganz wie du dir das vorstellst. In Perl sind Regular Expressions gut und einfach zu realisieren.

    Allerdings hast du auch bei Perl das Problem das du erst mal vor den Vergleichen der beiden Dateilisten diese erstellen und den Stand in einer Datei "einfrieren" musst. Erst dann kommen die RegEx zum Einsatz. Das zeitkritische sind die Erstellung der beiden Dateilisten. Wenn du dich auf einen Teil des Verzeichnissbaumes beschränken kannst gehts natürlicher dementsprechend schneller.

    Poste doch mal deinen Ansatz/Entwurf.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 Sir Auron, 27.10.2004
    Sir Auron

    Sir Auron Routinier

    Dabei seit:
    26.04.2004
    Beiträge:
    482
    Zustimmungen:
    0
    Also ich habs jetzt mit grep und strtok hinbekommen
     
  17. #15 bluelupo, 27.10.2004
    bluelupo

    bluelupo LangLinuxNutzer

    Dabei seit:
    23.11.2003
    Beiträge:
    119
    Zustimmungen:
    0
    Ort:
    Nahe der bayerischen Alpen
    Hi Sir Auron,

    lass es uns wissen wie du es gelöst hast. Danke !
     
Thema:

Filesystemänderungen und DIFF

Die Seite wird geladen...

Filesystemänderungen und DIFF - Ähnliche Themen

  1. diff in Bezug zu sed setzen

    diff in Bezug zu sed setzen: Hallo liebe Community, ich sitze seit gestern an einem Problem bei dem ihr mir hoffentlich helfen könnt. Meine Aufgabe ist es zwei...
  2. Bash - Zwei Binärdateien vergleichen (SQL Diff)

    Bash - Zwei Binärdateien vergleichen (SQL Diff): Moin, versuche zwei SQL Dumps miteinander zu vergleichen, dazu hole ich Stammdaten aus der MSSQL-DB und speichere sie direkt unter der Bash in...
  3. Wie ermittle ich die Differenz zwischen 2 Zahlen unter AIX (Syntax ähnl. wie LINUX) ?

    Wie ermittle ich die Differenz zwischen 2 Zahlen unter AIX (Syntax ähnl. wie LINUX) ?: Wie ermittle ich die Differenz zwischen 2 Zahlen unter AIX (Syntax ähnl. wie LINUX) ? Und wenn die Differenz nicht "0" ist, dann folgt Aktion ...
  4. Modulo C++ implementation (Diffie-Hellman-Schlüsselaustausch)

    Modulo C++ implementation (Diffie-Hellman-Schlüsselaustausch): Hi! Also ich hoffe einmal (ich gehe fast davon aus :D ), dass einige Leute hier im Forum den Diffie-Hellman-Schlüsselaustausch kennen. Unser...
  5. Patch erstellen mit patch oder diff

    Patch erstellen mit patch oder diff: Hallo zusammen Versuche gerade die Sache mit den Patches wirklich zu verstehen, denn ich habe nicht viel Erfahrung damit. Habe folgende...