Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    6

    Script Bash: HELP!!

    codice:
    #bin/bash
    
    case $# in
    	0) echo 'uso: dcomp dir1 dir2'
    	exit 2;;
    esac
    
    if [ -d $1 ]
    	then
    		echo 'ok - dir valida'
    	else
    		echo 'no - dir non valida'
    fi
    
    if [ -d $2 ]
    	then
    		echo 'ok - dir valida'
    	else
    		echo 'no - dir non valida'
    fi
    
    ricercafile=' find $1/* -printf " %p \n " '
    declare -a dirfile
    count=0
    for conffile in ricercafile
    	do
    		dirfile[$count]=$conffile
    		(( count++ ))
    		numfile=$count
    	done
    
    ripete sopra per $2, con parametri dirfile2, ricercafile2, numfile2.
    
    count=1
    while [ $count -le $numfile ]; do
    	if [${dirfile[numfile]} != ${dirfile2[numfile2]} ]
    		then
    			echo 'diverse'
    			exit 1
    		else
    			echo 'uguali'
    	fi
    done
    exit 0

    vorrei almeno riuscire a controllare se l'array dei file della prima dir è uguale a quello della dir 2, in questo modo dico se sono uguali le cartelle (GIUSTO??????) anche se manca tutto il resto del controllo sul tipo file.

    per quello penso dovrei fare degli if annidati nel while che controllano che tipo di file è, se di testo controlla i nomi uguali, se non è di testo controlla la modifica.. FORSE -.-


  2. #2
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    Io userei diff, decisamente risolveresti parecchi problemi.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    6
    pensavo (mi fermo qui perchè poi non so concretizzare) di leggere i file contenuti nei due vettori e confrontarne i nomi...

    se sono tutti uguali mi dice "dir uguali"

    se non lo sono "dir diverse"

    ma non so come implementarlo....

  4. #4
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    Scusa ma non ho capito se tu lo stai facendo così per una ragione particolare. Perché se non ci sono ragioni per farlo così basta
    codice:
    # diff -r dir1 dir2
    e fa più o meno la stessa cosa.
    Per ottenere l'output che vuoi tu basta fare una cosa del genere
    codice:
    #!/bin/bash
    
    # nel caso dir1 e dir2 siano uguali diff non produce
    # nessun output
    if [ `diff -r dir1 dir2 | wc -l` -eq 0 ]; then
      echo "dir uguali"
    
    else
      echo "dir diverse"
    
    fi
    La cosa cambia (e diventa parecchio intricata) se vuoi controllare che anche il contenuto dei file sia uguale.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    6
    Originariamente inviato da toraz
    Scusa ma non ho capito se tu lo stai facendo così per una ragione particolare. Perché se non ci sono ragioni per farlo così basta
    codice:
    # diff -r dir1 dir2
    e fa più o meno la stessa cosa.
    Per ottenere l'output che vuoi tu basta fare una cosa del genere
    codice:
    #!/bin/bash
    
    # nel caso dir1 e dir2 siano uguali diff non produce
    # nessun output
    if [ `diff -r dir1 dir2 | wc -l` -eq 0 ]; then
      echo "dir uguali"
    
    else
      echo "dir diverse"
    
    fi
    La cosa cambia (e diventa parecchio intricata) se vuoi controllare che anche il contenuto dei file sia uguale.
    ok. grazie..

    a grandi linee come posso controllare se sono in presenza di file di testo e se questi sono uguali?

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    6
    se faccio una cosa di questo tipo:
    codice:
    if [ file è di testo ]
        then
               if [ file2 è di testo ]
                     then
                           if [ file = file2 ]
                                then
                                         echo 'uguali'
                                else
                                        echo 'diverse'
                          fi
             fi
        else
            if [ file ha stessa data modifica file2 ]
               then
                     echo 'uguali'
               else
                    echo 'diverse'
           fi
    fi
    penso vada messo in un for, che va da 0 o 1 alla fine dell'array, in modo da confrontare file[i] con file2[i].

    può andare?

    però devo capire come lavorare sugli array, come confrontare i vari elementi file[i] con file2[i] ecc...

  7. #7
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    Se vuoi controllarare che i file siano identici proprio del tutto controllare il tipo di file o le date di modifica serve a tanto come niente. Invece per controllare se due file hanno lo stesso contenuto la cosa migliore che puoi fare è del tipo
    codice:
    if [ `sum file1 | cut -d " " -f 1-2` = \
         `sum file2 | cut -d " " -f 1-2` ]; then
      echo "uguali"
    
    else
      echo "diversi"
    
    fi
    In alternativa a sum puoi usare anche md5sum o sha1sum, cambiando però il comando
    codice:
    cut -d " " -f 1-2
    in
    codice:
    cut -d " " -f 1
    Questo ovviamente dovresti farlo per ogni file che trovi spulciando ricorsivamente nella directory, e a mio
    modo di vedere rischia di diventare un delirio, anche perchè in bash la ricorsione è una faccenda dannatamente (ma intendo davvero parecchio) lenta.

    Una soluzione decisamente più semplice, ma che non posso giurare che funzioni, potrebbe essere di prendere
    le directory che devi confrontare, farne degli archivi tar e poi confrontare i due archivi
    codice:
    tar -cf dir1.tar dir1
    tar -cf dir2.tar dir2
    
    if [ `sum dir1.tar | cut -d " " -f 1-2` = \
         `sum dir2.tar | cut -d " " -f 1-2` ]; then
      echo "uguali"
    
    else
      echo "diverse"
    
    fi
    
    rm -f dir1.tar dir2.tar
    Ovviamente ha il difetto di dover creare i due archivi che occupano tanto spazio quanto ne occupano le directory.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    6
    ciao, grazie mille per la risposta...

    voglio fare cosi:

    ho creato (spero) due array, dirfile e dirfile2 che contengono l'elenco dei file delle due directory.

    Adesso vorrei controllare che gli elementi dell'array siano uguali, nel caso sono tutti uguali stampo "ok, uguali" altrimenti "diversi".

    ho capito che dovrei usare un ciclo for, ma non so bene come strutturarlo...

  9. #9
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    Originariamente inviato da dibe
    voglio fare cosi
    Ma c'è una ragione percui vuoi proprio fare così a tutti i costi, o ti piace solo complicarti l'esistenza?

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    6
    Originariamente inviato da toraz
    Ma c'è una ragione percui vuoi proprio fare così a tutti i costi, o ti piace solo complicarti l'esistenza?
    devo rispettare la consegna di un esercizio...

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.