Script Ubuntu - Eliminazione file più vecchi di 30 giorni
-
- Prode Principiante
- Messaggi: 24
- Iscrizione: martedì 28 gennaio 2014, 16:13
- Distribuzione: Ubuntu 14.04.1 LTS x86_64
- Località: Tivoli (Rm)
- Contatti:
Script Ubuntu - Eliminazione file più vecchi di 30 giorni
mi stavo divertendo un po con gli script ubuntu nome_script.sh scritti in bash.
Il dilemma mi è venuto quando ho provato a fare quanto segue:
Per creare un comando che sia capace di eliminare dei file più vecchi di 30 giorni dentro una directory ho scritto quanto segue:
find /PATH/DELLA/DIRECTROY/ -type D -mtime +30 -exec rm -r {}\;
Ma se allo stesso tempo io vorrei far diventare tale funzione da statica a dinamica ovvero ogni volta che mi parte lo script decido io dove andare a fare le modifiche dovuto.
Per esempio vorrei settare tre variabili dinamiche che mi cambiano all'occorrenza ovvero:
#!/bin/bash
directory=
tipo=
giorni=
comando=
#Con il seguente comando andiamo a eliminare i File's e le Directory presenti dentro la Directory desiderata
#find $directory -type $tipo -mtime $giorni -exec $comando\;
exit 0
come potrei fare???
Grazie.
-
- Entusiasta Emergente
- Messaggi: 1506
- Iscrizione: mercoledì 22 dicembre 2010, 18:09
- Desktop: Unity
- Distribuzione: Ubuntu 14.04.1 LTS 64bit
- Località: Verona
Re: Script Ubuntu
ARuggeri ha scritto:ogni volta che mi parte lo script decido io dove andare a fare le modifiche
Non hai spiegato come vuoi fare a settare queste variabili. Vuoi settarle alla chiamata dello script? Vuoi che lo script le deduca da solo in qualche modo a partire (ad esempio) dalle variabili di ambiente? Vuoi che lo script le legga da file?ARuggeri ha scritto:vorrei settare tre variabili dinamiche che mi cambiano all'occorrenza
PS: ricordati di usare i tag code quando inserisci listati in un messaggio. Potresti modificare il tuo post sopra per favore?
-
- Imperturbabile Insigne
- Messaggi: 2848
- Iscrizione: domenica 11 maggio 2008, 18:03
- Desktop: plasma
- Distribuzione: 22.04
- Località: Palermo
Re: Script Ubuntu
ogni volta che mi parte lo script decido io dove andare a fare le modifiche
Codice: Seleziona tutto
#!/bin/bash
[[ $# -lt 4 || ! -d $1 ]] && echo -e "Esegue COMMAND su tutti gli elementi di tipo TYPE contenuti in DIR,
\t\tse sono più vecchi di DAYS giorni
USO:\t$(basename "$0") DIR TYPE DAYS 'COMMAND' [1]
\tDIR\tPath in cui iniziare la ricerca
\tTYPE\tTipo di file su cui agire ( vedi: man find )
\tDAYS\tEtà in giorni dei file su cui agire
\tCOMMAND\tStringa tra apici con 'comando --opzioni'
\t1\tOpzione per ricerca NON-ricorsiva. Default: tutte le sub-cartelle
" && exit 2
[[ $5 = 1 ]] && depth="-maxdepth 1"
find $1 $depth -type $2 -mtime +$3 -exec $4 {} \;
non che sia impossibile, solo diventa più complicato scrivere la linea di comando e/o parsarla all'interno dello script
-
- Prode Principiante
- Messaggi: 24
- Iscrizione: martedì 28 gennaio 2014, 16:13
- Distribuzione: Ubuntu 14.04.1 LTS x86_64
- Località: Tivoli (Rm)
- Contatti:
Re: Script Ubuntu - Eliminazione file più vecchi di 30 giorn
-
- Prode Principiante
- Messaggi: 24
- Iscrizione: martedì 28 gennaio 2014, 16:13
- Distribuzione: Ubuntu 14.04.1 LTS x86_64
- Località: Tivoli (Rm)
- Contatti:
Re: Script Ubuntu - Eliminazione file più vecchi di 30 giorn
Codice: Seleziona tutto
(tale campo cosa indica?) [[ $# -lt 4 || ! -d $1 ]]
(perchè esegui tale comando?) echo -e "Esegue COMMAND su tutti gli elementi di tipo TYPE contenuti in DIR, \t\tse sono più vecchi di DAYS giorni
#!/bin/bash
[[ $# -lt 4 || ! -d $1 ]] && echo -e "Esegue COMMAND su tutti gli elementi di tipo TYPE contenuti in DIR,
\t\tse sono più vecchi di DAYS giorni
(con tale campo assegna un comando a una variabile o fa altro?) USO:\t$(basename "$0") DIR TYPE DAYS 'COMMAND' [1]
(in questa sequenza cosa esegue lo script)
\tDIR\tPath in cui iniziare la ricerca
\tTYPE\tTipo di file su cui agire ( vedi: man find )
\tDAYS\tEtà in giorni dei file su cui agire
\tCOMMAND\tStringa tra apici con 'comando --opzioni'
\t1\tOpzione per ricerca NON-ricorsiva. Default: tutte le sub-cartelle
" && exit 2
[[ $5 = 1 ]] && depth="-maxdepth 1"
(qui è più chiaro in quanto lo script esegue il comando desiderato dove le variabile prendono il valore assegnatogli prima ma che non riesco a capire con chiarezza come è stato possibile ovvero $1 $depth $2 $3 $4 dove le vai a dichiarare???)
find $1 $depth -type $2 -mtime +$3 -exec $4 {} \;
-
- Entusiasta Emergente
- Messaggi: 1506
- Iscrizione: mercoledì 22 dicembre 2010, 18:09
- Desktop: Unity
- Distribuzione: Ubuntu 14.04.1 LTS 64bit
- Località: Verona
Re: Script Ubuntu
- jackynet92
- Moderatore Globale
- Messaggi: 13413
- Iscrizione: sabato 3 settembre 2011, 1:41
- Desktop: Mate
- Distribuzione: Ubuntu 16.04 64bit
- Sesso: Maschile
- Località: Torino
Re: Script Ubuntu
- 1. selezionare il testo del terminale
2. tasto destro copia (in alternativa premere Ctrl + maiusc + C)
3. incollare sul forum negli appropriati code, ovvero selezionare il testo e cliccare su Codice
Codice: Seleziona tutto
[color=#FF0000] qui inserisci il testo [/color][ /code]
[code]in modo da ottenere qualcosa di simile
-
- Imperturbabile Insigne
- Messaggi: 2848
- Iscrizione: domenica 11 maggio 2008, 18:03
- Desktop: plasma
- Distribuzione: 22.04
- Località: Palermo
Re: Script Ubuntu - Eliminazione file più vecchi di 30 giorn
Salva tutto il codice dello script in un file di nome p.es. foo, poi esegui
Codice: Seleziona tutto
chmod +x foo
./foo
$1 $2 ... $N sono parametri posizionali: argomenti che si passano allo script dalla linea di comando e che sono identificati dalla posizione che hanno dopo il nomescript: $1 è la prima stringa che metti , $2 la seconda, $N l'ennesima
$0 è il nome dello script
$* e $@ rappresentano tutte le variabili passate allo script
$# rappresenta il numero di parametri passati
lo script richiede di avere passati quattro parametri obbligatori e uno facoltativo; su questi non fa controlli di congruità salvo i due seguenti:
Codice: Seleziona tutto
[[ $# -lt 4 || ! -d $1 ]] && echo "blabla" && exit 2
questa riga controlla appunto che il numero di parametri ($#) non sia minore di 4 e che il primo dei parametri ($1) non sia una cartella inesistente. Se anche una sola delle due condizioni è vera, mostra un help ( && echo "blabla" ) ed esce (&& exit 2).
Così com'è l'esempio, quindi sta all'utente curare che l'ordine con cui i parametri vengono passati e la sintassi sia corretta...
Per dettagli ti rimando a:
Codice: Seleziona tutto
man [
man test # che è la stessa cosa
-
- Prode Principiante
- Messaggi: 24
- Iscrizione: martedì 28 gennaio 2014, 16:13
- Distribuzione: Ubuntu 14.04.1 LTS x86_64
- Località: Tivoli (Rm)
- Contatti:
Re: Script Ubuntu - Eliminazione file più vecchi di 30 giorn
Il tuo codice è molto lineare ed esaustivo ti volevo chiedere prendendo spunto da quanto ci siamo detti sono arrivato a questa soluzione secondo te potrebbe andare bene:
Codice: Seleziona tutto
#!/bin/bash
#Con il seguente comando andiamo ad eliminare i File's e le Directory più vecchie di almeno 30 giorni,
#presenti dentro la Directory desiderata con
find $1 -type $2 -mtime +$3 -exec echo $4 {}\;
#Per eseguire lo script lanciamo il seguete comando da terminale:
#./rimuovi.sh $1=/Directory $2=-f $3=30 $4=rm -r
exit 0
- difesaparcosempione
- Rampante Reduce
- Messaggi: 6031
- Iscrizione: giovedì 27 luglio 2006, 19:06
- Località: Torino
- Contatti:
Re: Script Ubuntu - Eliminazione file più vecchi di 30 giorn
Se ti interessa i file dovresti mettere -f
ciao
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4446
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: Script Ubuntu - Eliminazione file più vecchi di 30 giorn
Visto che Rai non è intervenuto cerco di farti notare quello che non va.ARuggeri [url=http://forum.ubuntu-it.org/viewtopic.php?p=4684043#p4684043][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Codice: Seleziona tutto
#!/bin/bash ... #./rimuovi.sh $1=/Directory $2=-f $3=30 $4=rm -r
Hai letto la pagina sui parametri posizionali "linkata" da Rai? Pare di no.
I valori dei parametri vengono assegnati automaticamente alle variabili $1, $2...$n , non devi passare le assegnazioni allo script.
non così:
Codice: Seleziona tutto
nome_script.sh $1=xxx $2=yyy $3=zzz $4='aa -bb'
Codice: Seleziona tutto
nome_script.sh xxx yyy zzz 'aa -bb'
Codice: Seleziona tutto
./rimuovi.sh /tmp f 30 'rm -r'
Codice: Seleziona tutto
#!/bin/bash
clear
n_par=$#
echo "Sono stati passati $n_par parametri."
echo -e "\nI parametri passati sono: $@\n"
echo -e 'Il comando costruito con \n\n\t"find $1 $depth -type $2 -mtime +$3 -exec $4 {} \;"\nsarà:'
echo -e "\n\tfind $1 $depth -type $2 -mtime +$3 -exec $4 {} \;\n"
echo 'Questi i parametri'
for (( i=1; i <= $n_par; i++ ))
do
echo "il parametro \$$i è: $1"
shift
done
# Occhio! Eseguito questo ciclo, con shift, i parametri posizionali andranno persi!
Codice: Seleziona tutto
./elenca_parametri.sh /tmp f 30 'ls -al'
Codice: Seleziona tutto
Sono stati passati 4 parametri.
I parametri passati sono: /tmp f 30 ls -al
Il comando costruito con
"find $1 $depth -type $2 -mtime +$3 -exec $4 {} \;"
sarà:
find /tmp -type f -mtime +30 -exec ls -al {} \;
Questi i parametri
il parametro $1 è: /tmp
il parametro $2 è: f
il parametro $3 è: 30
il parametro $4 è: ls -al
-
- Prode Principiante
- Messaggi: 24
- Iscrizione: martedì 28 gennaio 2014, 16:13
- Distribuzione: Ubuntu 14.04.1 LTS x86_64
- Località: Tivoli (Rm)
- Contatti:
[SOLVE] Script Ubuntu-Eliminazione file più vecchi di 30 gio
GRAZIE A TUTTI!!!!!
- jackynet92
- Moderatore Globale
- Messaggi: 13413
- Iscrizione: sabato 3 settembre 2011, 1:41
- Desktop: Mate
- Distribuzione: Ubuntu 16.04 64bit
- Sesso: Maschile
- Località: Torino
Re: Script Ubuntu - Eliminazione file più vecchi di 30 giorn
Se vuoi puoi installare questo script che ti aggiunge un pulsante che ti permette di mettere [Risolto] con un solo click.
Alla prossima
-
- Prode Principiante
- Messaggi: 24
- Iscrizione: martedì 28 gennaio 2014, 16:13
- Distribuzione: Ubuntu 14.04.1 LTS x86_64
- Località: Tivoli (Rm)
- Contatti:
Re: Script Ubuntu - Eliminazione file più vecchi di 30 giorn
Codice: Seleziona tutto
#!/bin/bash
FINDBIN=/usr/bin/find
if [ -z $1 ]; then
# Verifica che il parametro sia un percorso esistente, altrimenti deve restituire errore
# Se percorso valido, valorizzare BEGINDIR con $1
BEGINDIR=$1
fi
# Imposta la variabile FILETYPE con $2, altrimenti restituisce errore
if [ $2 == 'd' || $2 == 'f' ]; then
FILETYPE=$2
else
exit 10;
fi
# Verifica che il terzo parametro sia un numero intero positivo
...
NUMOFDAYS=$3
#Con il seguente comando andiamo ad eliminare i File's e le Directory più vecchi di almeno 30 giorni
$FINDBIN ${BEGINDIR} -type ${FILETYPE} -mtime +${NUMOFDAYS} -exec /bin/rm {}\;
exit 0
Grazie e Buon Weekend
-
- Imperturbabile Insigne
- Messaggi: 2848
- Iscrizione: domenica 11 maggio 2008, 18:03
- Desktop: plasma
- Distribuzione: 22.04
- Località: Palermo
Re: Script Ubuntu - Eliminazione file più vecchi di 30 giorn
Codice: Seleziona tutto
if [ -d $1 ]; then
BEGINDIR=$1
fi
Codice: Seleziona tutto
re='^[0-9]+$'
if [[ $3 =~ $re ]]; then
NUMOFDAYS=$3
fi
Codice: Seleziona tutto
re='^[0-9]+$'
if [[ $3 =~ $re && $3 -ge 30 ]]; then
NUMOFDAYS=$3
fi
Chi c’è in linea
Visualizzano questa sezione: Bing [Bot] e 20 ospiti