Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [BASH-SCRIPT] Cancellazione e rimozione file in determinate directory (da migliorare)

    Ciao! Mi aiutare a migliorare questo script.. che deve ancora nascere a dir la verità..
    codice:
    #!/bin/sh
    #Pulizia Pre-Backup
    
    #Selezione directory
    #if di selezione directory se l'argomento non esiste argomento utilizza directory corrente
    
    #Formato file da eliminare
    FILE_TO_REMOVE="jpeg jpg tiff tif png bmp"
    #Formato file da comprimere
    FILE_TO_COMPRESS="model prt pd dwg"
    
    echo "Rimozione file..."
    #foreach con comando ed echo
    echo "Rimozione file eseguita"
    
    echo "Compressione file..."
    #foreach con comando ed echo
    echo "Compressione file eseguita"
    
    [...]
    
    #Rimozione
    find . -name \*.jpg -exec rm {} \;
    find . -name \*.jpeg -exec rm {} \;
    find . -name \*.tiff -exec rm {} \;
    find . -name \*.tif -exec rm {} \;
    find . -name \*.png -exec rm {} \;
    find . -name \*.bmp -exec rm {} \;
    #Compressione
    find . -name \*.model -exec compress {} \; #CATIA
    find . -name \*.prt -exec compress {} \; #UNIGRAPHICS
    find . -name \*.pd -exec compress {} \; #CV
    find . -name \*.dwg -exec compress {} \; #AUTOCAD
    Più o meno devo fare questo.
    Quindi dovrei avere un foreach per la rimozione ed uno per la compressione dei file specificati nelle due variabili. Più un echo che dice "File estensione rimossi..", ecc..
    L'importante è che funzioni tutto questo, poi dovrei gestire gli errori ma posso vederlo con calma. Grazie

  2. #2
    E' già arrivata una richiesta in più.. due VVoVe:
    Ogni file che viene modificato o rimosso deve essere inserito in un file esterno di log.
    Devo prevedere altre opzioni da linea di comando:
    codice:
    $mioscript -p png #Stampa a video i file png trovati ma non li cancella
    codice:
    $mioscript -p #Stampa a video tutti i file trovati interessati dalle due variabili ma non li cancella
    codice:
    $mioscript -r png #Rimuove i file trovati (primo ciclo foreach)
    codice:
    $mioscript -r  #Rimuove tutti i file (prima variabile, primo ciclo foreach)
    codice:
     $mioscript -c model #Comprime i file trovati (secondo ciclo foreach)
    codice:
    $mioscript -c  #Comprime tutti i file trovati  (seconda variabile, secondo ciclo foreach)
    codice:
    $mioscript -s  #Esegue lo script per intero
    Riuscite ad aiutarmi? Grazie

    Oops ..
    codice:
    $mioscript -c model /directory
    per impostare la directory e non utilizzare quella corrente.

  3. #3

    Re: [BASH-SCRIPT] Cancellazione e rimozione file in determinate directory (da miglior

    codice:
    #!/bin/sh
    #Pulizia Pre-Backup
    
    #Selezione directory
    #if di selezione directory se l'argomento non esiste argomento utilizza directory corrente
    if [ -n $1 ] && [ -d $1 ]; then
       BACKUP_DIR = "$1"
    else
       BACKUP_DIR = .
    fi
    
    #Formato file da eliminare
    FILE_TO_REMOVE="jpeg jpg tiff tif png bmp"
    #Formato file da comprimere
    FILE_TO_COMPRESS="model prt pd dwg"
    
    LOG_REMOVED="/tmp/backup_removed_`date +%Y%m%d.log"
    echo "Removed files from directory $BACKUP_DIR on `date +%d-%m-%Y:\n" >> "$LOG_REMOVED"
    
    LOG_COMPRESSED="/tmp/backup_compressed_`date +%Y%m%d.log"
    echo "Compressed files in directory $BACKUP_DIR on `date +%d-%m-%Y:\n" >> "$LOG_COMPRESSED"
    
    echo "Rimozione file..."
    #foreach con comando ed echo
    for EXT in "$FILE_TO_REMOVE"; do
       find "$BACKUP_DIR" -name \*."$EXT" -exec rm {} \; -exec echo {} >> "$LOG_REMOVED" \;
    done
    echo "Rimozione file eseguita"
    
    echo "Compressione file..."
    #foreach con comando ed echo
    for EXT in "$FILE_TO_COMPRESS"; do
       find "$BACKUP_DIR" -name \*."$EXT" -exec compress {} \; -exec echo {} >> "$LOG_COMPRESSED" \;
    done
    echo "Compressione file eseguita"

    Quasi sicuramente non funziona, lo ho scritto qui senza testarlo

  4. #4
    Inizio a provare così..
    Ho fatto una modifica al post di prima.. :rollo:
    Grazie per adesso!!

  5. #5
    Per le opzioni c'è getopt, `man getopt` per informazioni

  6. #6
    Grazie. Comuque se utilizzo getopt devo creare delle funzioni per i cicli for giusto?

  7. #7
    Tra un po' posto lo script.. se potete controllarlo visto che ho trovato diversi modi per fare la stessa cosa (cosa normale).. credo di aver fatto qualche pasticcio..

    Mi dite solo come posso fare per (solo un esempio) controllare se la directory è stata settata sia in questo modo qua
    codice:
    $mioscript -r /directory
    che in questo
    codice:
    $mioscript -r png /directory
    ??
    Cioè quando ho anche un'altro argomento (da utilizzare con getopt..) prima della dir.

  8. #8
    codice:
    #!/bin/sh
    #Utilizzo directory corrente se non specificata
    if [ -n $1 ] && [ -d $1 ]; then
       BACKUP_DIR = "$1"
    else
       BACKUP_DIR = .
    fi
    
    ## FILE
    #Formato file da eliminare
    FILE_TO_REMOVE="jpeg jpg tiff tif png bmp"
    #Formato file da comprimere
    FILE_TO_COMPRESS="model prt pd dwg"
    
    ## LOG
    #Impostazione File di log
    LOG_REMOVED="/tmp/backup_removed_`date +%Y%m%d.log"
    echo "Removed files from directory $BACKUP_DIR on `date +%d-%m-%Y:\n" >> "$LOG_REMOVED"
    LOG_COMPRESSED="/tmp/backup_compressed_`date +%Y%m%d.log"
    echo "Compressed files in directory $BACKUP_DIR on `date +%d-%m-%Y:\n" >> "$LOG_COMPRESSED"
    
    #Errore
    E_OPTERR=65
    
    #Linea di comando senza argomento
    if [ "$#" -eq 0 ]
    then   # Script needs at least one command-line argument.
      echo "Usage $0 -[options c,r,s]"
      exit $E_OPTERR
    fi
    
    set -- `getopt "crs:" "$@"`
    # Sets positional parameters to command-line arguments.
      
    while [ ! -z "$1" ]
    do
      case "$1" in
        -c) compress_file();;
        -r) remove_file();;
        -s) compress_file && remove_file;;
         *) break;;
      esac
      shift
    done
    
    compress_file(){
    echo "$FILE_TO_COMPRESS"; do
       find "$BACKUP_DIR" -name \*."$EXT" -exec compress {} \; -exec echo {} >> "$LOG_COMPRESSED" \;
    done
    echo "Compressione file... completa."
    }
    
    remove_file(){
    echo "Rimozione file..."
    for EXT in "$FILE_TO_REMOVE"; do
       find "$BACKUP_DIR" -name \*."$EXT" -exec rm {} \; -exec echo {} >> "$LOG_REMOVED" \;
    done            
    echo "Rimozione file... completa."
    }
    Mi dite tutti gli errori che ci sono? A parte il problema delle $0, $1, $2 che non ho capito come risolvere.. Necessario anche per poter cancellare solo i file di un certo tipo..
    Grazie

  9. #9
    Utente di HTML.it L'avatar di Ilmalcom
    Registrato dal
    Oct 2002
    Messaggi
    1,345
    Così ad occhio, piuttosto di corsa, noto che mancano alcune ` dopo l'esecuzione dei comandi date. Inoltre l'utilizzo di getopt mi pare un po' strano, ma non ho usato spesso quel comando, ti consiglio di guardare questo esempio
    http://www.tldp.org/LDP/abs/html/internal.html#EX33

  10. #10
    Effettivamente era pieno di bug.. Questo
    codice:
    #Utilizzo directory corrente se non specificata
    if [ -n $2 ] && [ -d $2 ]; then
       BACKUP_DIR="$1"
    else
       BACKUP_DIR="."
    fi
    
    ## FILE
    #Formato file da eliminare
    FILE_TO_REMOVE="jpeg jpg tiff tif png bmp"
    #Formato file da comprimere
    FILE_TO_COMPRESS="model prt pd dwg"
    #File da printare
    FILE_TO_PRINT="$FILE_TO_COMPRESS $FILE_TO_REMOVE"
    
    ## LOG
    #Impostazione File di log
    #touch "/tmp/backup_removed_`date +%Y%m%d`.log"
    #touch "/tmp/backup_compressed_`date +%Y%m%d`.log"
    
    LOG_REMOVED="/tmp/backup_removed_`date +%Y%m%d`.log"
    echo "Removed files from directory $BACKUP_DIR on `date +%d-%m-%Y`:\n" >> "$LOG_REMOVED"
    LOG_COMPRESSED="/tmp/backup_compressed_`date +%Y%m%d`.log"
    echo "Compressed files in directory $BACKUP_DIR on `date +%d-%m-%Y`:\n" >> "$LOG_COMPRESSED"
    
    #Errore
    E_OPTERR=65
    
    #Linea di comando senza argomento
    if [ "$#" -eq 0 ]
    then   # Script needs at least one command-line argument.
      echo "Usage $0 -[options c,r,s,p]"
      exit $E_OPTERR
    fi
    
    #Funzione compressione file
    compress_file() {
    echo "Compressione file..."
    for EXT in "$FILE_TO_COMPRESS"; do
    find "$BACKUP_DIR" -name \*."$EXT" -exec compress {} \; -exec echo {} >> "$LOG_COMPRESSED" \;
    done
    echo "Compressione file... completa."
    }
    
    #Funzione rimozione file
    remove_file() {
    echo "Rimozione file..."
    for EXT in "$FILE_TO_REMOVE"; do
       find "$BACKUP_DIR" -name \*."$EXT" -exec rm {} \; -exec echo {} >> "$LOG_REMOVED" \;
    done            
    echo "Rimozione file... completa."
    }
    
    #Funzione print file --TEMPORANEO--
    print_file() {
    for EXT in "$FILE_TO_PRINT"; do
       echo $EXT;
    done            
    }
    
    set -- `getopt "crps:" "$@"`
    # Sets positional parameters to command-line arguments.
      
    while [ ! -z "$1" ]
    do
      case "$1" in
        -c) compress_file;;
        -r) remove_file;;
        -s) compress_file && remove_file;;
        -p) print_file;;
      esac
      shift
    done
    
    #Funzione print file
    #print_file(){
    #for EXT in "$FILE_TO_PRINT"; do
    #   find "$BACKUP_DIR" -name \*."$EXT" -print {} \;
    #done            
    #}
    con tutte le limitazioni del caso.. Tra cui la creazione dei file ed il discorso di come fare per controllare la directory sia se passo un argomento all'opzione sia in caso contrario..

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 © 2024 vBulletin Solutions, Inc. All rights reserved.