Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 41
  1. #1

    [BASH] confronto file e directory

    eccomi di nuovo con l'ultimo esercizio...
    consiste nella rilevazione di differenze tra file e directory.
    in dettaglio: ho 2 directory (senza sottodir ), ogni x secondi devo verificare ke il contenuto delle 2 sia uguale...
    le differenze riscontrare devono essere aggiunte al file log.txt con il seguente formato:
    data-ora myfile.java added|removed
    data-ora otherfile.java modified /path/to/diff-otherfile.java

    Quindi, ad ogni file contenuto nelle directory dovrà essere associato un file difffileName.java da memorizzare in una directory a scelta. In ognuno di questi file saranno aggiunte di volta in volta le differenze eventualmente rilevate nel file fileName.java nella seconda directory rispetto al suo omonimo nella prima directory.

    come posso impostare la cosa?
    posso usare il comando diff, ma nn so bene come...

    grazie
    V+K

  2. #2
    nn m abbandonate
    V+K

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [BASH] confronto file e directory

    Originariamente inviato da valer_85
    posso usare il comando diff, ma nn so bene come...
    Eccomi qua!!

    Il comando diff non è difficile da usare, devi solo controllare il suo codice di ritorno. Secondo la documentazione di diff (man diff), ritorna 0 se non ci sono differenze, 1 se ci sono differenze e 2 se ci sono stati degli errori interni al diff.

    Quindi si può fare così:

    codice:
    diff file1 file2 >/dev/null 2>/dev/null
    
    if [ $? -eq 0 ]; then
        # -- nessuna differenza --
    elif [ $? -eq 1 ]; then
        # -- differenze --
    elif [ $? -eq 2 ]; then
        # -- errore --
    fi
    Le due redirezioni servono solo per "buttare" via l'eventuale output di diff, dato che qui ci interessa solo il suo codice di ritorno.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    grazie and! x fortuna c 6 tu!

    si infatti avevo guardato il man e googlato un pò...
    cmq come faccio col diff a fare:

    data-ora myfile.java added|removed
    data-ora otherfile.java modified /path/to/diff-otherfile.java

    cioè, il man mi dice quali file ci sono diversi, ma come faccio a sapere se il file diverso è stato cancellato o aggiunto?
    e, x quanto riguarda la seconda riga, come faccio a sapere se un file è stato modificato?
    grazie
    V+K

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da valer_85
    cmq come faccio col diff a fare:

    data-ora myfile.java added|removed
    data-ora otherfile.java modified /path/to/diff-otherfile.java

    cioè, il man mi dice quali file ci sono diversi, ma come faccio a sapere se il file diverso è stato cancellato o aggiunto?
    e, x quanto riguarda la seconda riga, come faccio a sapere se un file è stato modificato?
    grazie
    Prendiamo, per iniziare, la questione del added/removed. In sostanza data una certa directory, scoprire se un file è stato aggiunto o rimosso. Questo comporta il fatto di dover conoscere non solo lo stato attuale della directory ma anche lo stato "precedente".

    Si può creare un file ordinato che contiene la lista dei file nella directory:

    ls $DIR | sort > /tmp/lista.new

    Poi con il "giochetto" del FIRST=0 o 1 (perché la prima volta non hai un "old") si fa il diff del file lista.new con un altro (che contiene lo stato precedente) chiamato per es. lista.old. Le differenze vanno mandate su un altro file che verrà poi letto riga x riga. All'inizio della riga c'è un ">" oppure "<" che indica appunto cosa c'è di diverso da una parte o dall'altra.
    È in effetti un po' palloso ma perfettamente fattibile!

    Con queste informazioni, prova a mettere giù del codice ... poi vediamo. Io ho già scritto del codice ma non volevo postarlo subito (altrimenti che gusto ci sarebbe?? )
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    infatti! hai ragione!
    lunedì provo, un pò d riposo in questo weekend, domani è il mio comple
    a lunedì!
    e grazie e buon weekend
    V+K

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da valer_85
    domani è il mio comple
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    allora... ecco cosa sono riuscito a fare..ben poco...

    codice:
    #!/bin/sh
    DIR1=$1  #directory stabile
    DIR2=$2  #directory che cambia
    first=0
    while true
    let "first += 1"
    if [$first = 1]; then
       ls $DIR2 | sort > /tmp/lista.new
    fi
    sleep 10
    done
    dovrebbe essere così: la prima volta crea un file col contenuto della dir... poi le volte successive il nuovo diventa vecchio...quindi dovrebbe creare un altro file...è questo ke nn riesco a capire...
    V+K

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da valer_85
    allora... ecco cosa sono riuscito a fare..ben poco...
    Forse sarebbe meglio iniziare (ed è quello che ho fatto io scrivendo un po' di codice) testando l'added/removed su una sola directory ... dico bene? Devi gestire anche questo, vero?
    Intendo dire che se viene creato un nuovo file nella DIR1 te ne devi accorgere.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    esatto, ho iniziato con quello... mi è venuta un'idea:
    ogni volta ke faccio il controllo il file .new viene copiato in un file .old e poi cancellato.
    quindi viene creato un file .new che è confrontato col .old...
    codice:
    #!/bin/sh
    DIR1=$1  #directory stabile
    DIR2=$2  #directory che cambia
    first=0
    while true; do
    echo volta numero $first
    let "first += 1"
    if test $first = 1; then
       ls $DIR2 | sort > /tmp/lista.new
    fi
    cat /tmp/lista.new > /tmp/lista.old
    rm /tmp/lista.new
    ls $DIR2 | sort > /tmp/lista.new
    diff /tmp/lista.old /tmp/lista.new > differenze.txt
    sleep 10 
    done
    nel file differenze.txt viene poi riportata la differenza rilevata... xò come faccio a sapere se la differenza consiste nell'aggiunta o nella rimozione... ecco il contenuto di differenze.txt nel caso di eliminazione del file xcwefw.c:
    codice:
    5d4
    < xcwefw.c
    V+K

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.