Manjaro Linux - Forum Italiano

Script pulizia

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Script pulizia
« il: Marzo 30, 2017, 10:46:11 am »
Ciao ragazzi! Sotto indicazione di Cubanpit, posto qui un mini script da migliorare cosicch possa essere utile a me e ad altri, spero. Dato che ho molta voglia di conoscere e apprendere nuove cose, penso sia utile la condivisione con maggiori esperti quali voi siete!!  :) :)

Codice: [Seleziona]
#!/bin/bash

echo -e "Pulisci pacchetti orfani"
sleep 1s
pacman -Rns $(pacman -Qdtq)
echo
echo -e "Pulisci cache"
sleep 1s
paccache -ruk0
paccache -r -u
echo -e "Pulisci thumbnails"
sleep 1s

##Pulizia Immagini

## Dati
 
carne='find . | wc -l'

echo -e "Cambio momentaneamente directory"
cd /home/manj/.thumbnails/normal/
echo
pwd
echo
echo "Directory esatta"
echo

## Condizione

if [[ '$carne' < 20 ]]; then
echo -n "Cancello file "
echo
sleep 1s | echo -n "."
sleep 1s | echo -n ".."
sleep 1s | echo -n "..."
sleep 1s | echo -n "...."
sleep 1s
echo
rm /home/manj/.thumbnails/normal/*
cd /home/manj
echo "Pulizia completata"
echo
else
sleep 1s | echo -n "."
sleep 1s | echo -n ".."
sleep 1s | echo -n "..."
sleep 1s | echo -n "...."
echo "Nessuna immagine"
echo
cd /home/manj
fi
echo
echo " + Fine + "
exit 0
- Vaio-SVE1513C1EW - Scheda grafica AMD/ATI Radeon 7550M/7570M/7650M - Intel Pentium 2020M @ 2x 2.4GHz - 4 gb di RAM - SSD SanDisk 240gb - Xubuntu 16.04 LTS - Manjaro 17 LTS

Cubanpit

  • *****
  • 1547
    • pitNtip
Re:Script pulizia
« Risposta #1 il: Marzo 30, 2017, 11:15:34 am »
Butto gi le prime cose che mi vengono in mente, ovviamente posso sbagliarmi, non mi considero un esperto ma ho scritto qualche script negli ultimi anni.

  • Usi spesso echo -e, ma non necessaria quell'opzione se non vuoi che echo interpreti determinati caratteri (ad esempio \n, \t etc.), trovi definizioni pi rigorose nel manuale di echo e nel manuale di bash.
  • Lo script pieno di sleep 1s, immagino che il motivo sia che ti piace la suspense  ;D , se ti "diverte" ci pu stare, ricordati che in quel secondo di attesa il tuo script non fa niente, come se si mettesse in pausa.
  • Quando scrivi carne='find . | wc -l' ; if [[ '$carne' < 20 ]] ; else ... cosa vuoi ottenere? In quel modo non fai altro che salvare una stringa in una variabile, non esegui un comando, quindi non ti restituir il numero di file (se quello che vuoi ottenere), inoltre non capisco perch la pulizia venga eseguita quando "ci sono meno di 20 file", non dovrebbe essere eseguita quando ci sono molti file? Per questo passaggio ti consiglio di non utilizzare il numero di file ma la loro "et", cerca nel manuale di find informazioni a riguardo.  ;)
  • Invece di scrivere sleep 1s | echo -n "." dovresti usare sleep 1s && echo -n ".", l'effetto in questo caso lo stesso, ma il primo utilizza la pipe che serve a redirigere l'output, non ad eseguire comandi in sequenza.
  • Utilizzi due volte paccache -ru anche se scritto in modi diversi, ti consiglio di toglierne uno e aggiungere invece paccache -rk2 che pulisce parzialmente anche la cache dei pacchetti installati (A questo punto mi stupisce che tu non avessi il pacchetto in cache nella discussione dell'altro thread).
  • Visti i comandi che esegui mi sembra di capire che utilizzi questo script con i privilegi di root, ti consiglio invece di eseguirlo con i privilegi di normale utente e anteporre sudo solo a quei comandi che hanno bisogno dei privilegi di amministratore.
  • Ultima nota, da precisino, indenta bene il codice da else in poi!  C:-)

Se mi viene in mente altro aggiungo in futuro, se vuoi trovare qualche spunto puoi cercare tutorial per bash su internet e ne trovi a bizzeffe, oppure consultare uno script esistente su GitHub (per esempio il mio cleanupdate ma anche pacui di un altro utente Manjaro pi esperto di me).

Re:Script pulizia
« Risposta #2 il: Marzo 30, 2017, 11:44:22 am »
I punti 1, 2, 4, 5 e 7 li ho capiti e cambiati nello script. Nel terzo punto intendevo far contare il numero di file(sul man page di wc, indicava -l come opzione in grado di contare le linee) e nel caso in cui avessero superato il 20, lo script avrebbe dovuto eliminarli. Per questo motivo ho impostato un ciclo if. :) Ho provato, funziona  :-\ Mentre riguardo al punto 6, come faccio?

In realt ho scaricato e stampato da internet "Guida avanzata di scripting bash" ed ho iniziato a studiarla un annetto fa. Dato che nella vita faccio altro, ho perso la mano e alcune cose non le ricordo. Per nel tempo libero mi diletto a esercitarmi, diciamo solo la sera!  ;D Comunque, ho trovato il tuo script negli AUR, ho scaricato  lo snapshot, ho estratto il file in una cartella e mi ritrova solo il PKGBUILD. Come mai? Sono una schiappa  ::)

P.s. Grazie mille
« Ultima modifica: Marzo 30, 2017, 11:47:30 am da Cavecan3m »
- Vaio-SVE1513C1EW - Scheda grafica AMD/ATI Radeon 7550M/7570M/7650M - Intel Pentium 2020M @ 2x 2.4GHz - 4 gb di RAM - SSD SanDisk 240gb - Xubuntu 16.04 LTS - Manjaro 17 LTS

Cubanpit

  • *****
  • 1547
    • pitNtip
Re:Script pulizia
« Risposta #3 il: Marzo 30, 2017, 12:38:00 pm »
Citazione
nel caso in cui avessero superato il 20, lo script avrebbe dovuto eliminarli
Allora perch come condizione hai messo "minore di 20"?
Tra l'altro non sono nemmeno sicuro che i segni ">,<,<=,>=" funzionino in bash, ma dovrei verificare, io uso sempre i comandi elencati nel manuale di test.

Citazione
Ho provato, funziona
No, non funziona per il motivo che pensi tu, il risultato di
Codice: [Seleziona]
dati='find . | wc -l'
[[ '$dati' < 20 ]] && echo yes
lo stesso di
Codice: [Seleziona]
dati='find . | wc -l'
[[ '$pappa' < 20 ]] && echo yes
Questo suggerisce che la condizione non sia affidabile.  ;)

Citazione
Mentre riguardo al punto 6, come faccio?
Scrivi sudo davanti ai comandi che senza non vengono eseguiti, per esempio pacman. Per identificarli esegui lo script come utente normale, e vedi i comandi che restituiscono errori dovuti ai permessi.

Citazione
In realt ho scaricato e stampato da internet "Guida avanzata di scripting bash"
Non ricordo gli argomenti, ma mi sembra che la "Guida avanzata" dia per scontati alcuni concetti contenuti in una guida pi basilare, assicurati di averli chiari.  ;)
Cerca anche su internet i tuoi dubbi, ho trovato spesso opinioni discordanti riguardo a quelle guide (se sono quelle di TLDP) e non sempre i metodi contenuti in esse sono al passo con i tempi, ma sono buone per avere un testo unico su cui studiare.

Citazione
Comunque, ho trovato il tuo script negli AUR, ho scaricato  lo snapshot, ho estratto il file in una cartella e mi ritrova solo il PKGBUILD. Come mai?
Perch su AUR c' solo quel file, funziona cos il sistema di pacchettizzazione. ;)
Se vuoi il file scaricalo direttamente da GitHub, trovi il link nella pagina di riferimento su AUR.

Citazione
Sono una schiappa  ::)
Esagerato! Devi chiarirti le idee, e ci si mette del tempo se si fa altro per lavoro, naturale!
Io sono avvantaggiato perch sono ancora uno studente, come direbbe la mia bisnonna sono un "mangiapane a tradimento", quindi ho tempo di dedicarmi ad altro.  O:-)

Re:Script pulizia
« Risposta #4 il: Marzo 30, 2017, 02:22:06 pm »
Citazione
Allora perch come condizione hai messo "minore di 20"?
Tra l'altro non sono nemmeno sicuro che i segni ">,<,<=,>=" funzionino in bash, ma dovrei verificare, io uso sempre i comandi elencati nel manuale di test.

No, non funziona per il motivo che pensi tu, il risultato di
Codice: [Seleziona]
dati='find . | wc -l'
[[ '$dati' < 20 ]] && echo yes
lo stesso di
Codice: [Seleziona]
dati='find . | wc -l'
[[ '$pappa' < 20 ]] && echo yes
Questo suggerisce che la condizione non sia affidabile.  ;)

L'ho cambiato un pochetto: :D

Codice: [Seleziona]
#!/bin/bash

echo "Pulisci pacchetti orfani"
sleep 1s
sudo pacman -Rns $(pacman -Qdtq)
echo
echo "Pulisci cache"
sleep 1s
sudo paccache -ruk2

##Pulizia Immagini

## Dati

echo "Pulisci thumbnails"
sleep 1s
 
stringa=`find . -type f -name *.png | wc -l`
numero=40

echo -e "Cambio\n momentaneamente\n\t directory"
cd /home/manj/.thumbnails/normal/
echo
pwd
echo
echo "Directory esatta"
echo

## Condizione

if [[ '$numero' < '$stringa' ]]; then
echo -n "Cancello file "
echo
sleep 1s && echo -n "."
sleep 1s && echo -n "."
sleep 1s && echo -n "."
sleep 1s && echo -n ".."
sleep 1s
echo
rm /home/manj/.thumbnails/normal/*
echo "Pulizia completata"
echo
else
sleep 1s | echo -n "."
sleep 1s | echo -n "."
sleep 1s | echo -n "."
sleep 1s | echo -n ".."
echo "No full"
echo
fi
echo
echo " + Fine + "
exit 0

Citazione
Scrivi sudo davanti ai comandi che senza non vengono eseguiti, per esempio pacman. Per identificarli esegui lo script come utente normale, e vedi i comandi che restituiscono errori dovuti ai permessi.

Fatto e funziona. In questo modo posso decidere se far partire quel comando o meno.  ^-^

Citazione
Non ricordo gli argomenti, ma mi sembra che la "Guida avanzata" dia per scontati alcuni concetti contenuti in una guida pi basilare, assicurati di averli chiari.  ;)
Cerca anche su internet i tuoi dubbi, ho trovato spesso opinioni discordanti riguardo a quelle guide (se sono quelle di TLDP) e non sempre i metodi contenuti in esse sono al passo con i tempi, ma sono buone per avere un testo unico su cui studiare.

Io ho scaricato questa qui, e per qualche dubbio do una sguardo sul web o youtube.

Citazione
Perch su AUR c' solo quel file, funziona cos il sistema di pacchettizzazione. ;)
Se vuoi il file scaricalo direttamente da GitHub, trovi il link nella pagina di riferimento su AUR.

Ho appenda dato uno sguardo al tuo script, complimenti!! Ho capito ben poco  ;D ;D ;D Per ne far tesoro, esaminandolo a poco a poco. Volevo porti una domanda, anche se sciocca: perch la parte iniziale dello script(ossia il men ) sta alla fine dello script?

Citazione
Esagerato! Devi chiarirti le idee, e ci si mette del tempo se si fa altro per lavoro, naturale!
Io sono avvantaggiato perch sono ancora uno studente, come direbbe la mia bisnonna sono un "mangiapane a tradimento", quindi ho tempo di dedicarmi ad altro.  O:-)

Anch'io sono uno studente, di musica per. Il fatto di unire le due cose mi affascina e non poco!!
« Ultima modifica: Marzo 30, 2017, 02:56:51 pm da Cavecan3m »
- Vaio-SVE1513C1EW - Scheda grafica AMD/ATI Radeon 7550M/7570M/7650M - Intel Pentium 2020M @ 2x 2.4GHz - 4 gb di RAM - SSD SanDisk 240gb - Xubuntu 16.04 LTS - Manjaro 17 LTS

Cubanpit

  • *****
  • 1547
    • pitNtip
Re:Script pulizia
« Risposta #5 il: Marzo 30, 2017, 06:15:14 pm »
Citazione
Io ho scaricato questa qui
la guida di TLDP tradotta da pluto.it.

Citazione
Volevo porti una domanda, anche se sciocca: perch la parte iniziale dello script(ossia il men ) sta alla fine dello script?
Sono tutte funzioni, tranne le ultime righe che richiamano le funzioni definite in precedenza. Una funzione pu essere chiamata solo dopo essere stata definita.

Citazione
In questo modo posso decidere se far partire quel comando o meno.
E se sbagli a scrivere non rischi di cancellare file di sistema (se non c' sudo davanti).

Adesso questo ti salva in stringa una valore, in questo modo:
Codice: [Seleziona]
stringa=`find . -type f -name *.png | wc -l`(Prima usavi le virgolette sbagliate, per questo ti dicevo che salvavi solo una stringa.)
Per dopo aver salvato questo valore cambi cartella, non capisco per quale motivo, una volta che il valore salvato nella variabile non cambia pi.

Il codice non ancora indentato bene, almeno quello che appare sul forum.
Ti consiglio, come buona pratica di programmazione, di chiamare le variabili con un nome che renda intuitivo capire cosa contengono.
(Ti faccio notare che nella seconda parte utilizzi ancora la pipe al posto di &&)

Re:Script pulizia
« Risposta #6 il: Marzo 30, 2017, 10:53:28 pm »
Citazione
Sono tutte funzioni, tranne le ultime righe che richiamano le funzioni definite in precedenza. Una funzione pu essere chiamata solo dopo essere stata definita.

Ok, capito!!
Citazione
Adesso questo ti salva in stringa una valore, in questo modo:
Codice: [Seleziona]
stringa=`find . -type f -name *.png | wc -l`(Prima usavi le virgolette sbagliate, per questo ti dicevo che salvavi solo una stringa.)
Per dopo aver salvato questo valore cambi cartella, non capisco per quale motivo, una volta che il valore salvato nella variabile non cambia pi.

Ora ho capito cosa volevi dirmi. Ho provato il comando find . -type f -name *.png | wc -l nella home, ed oltre alla directory a cui facevo riferimento io(.thumbnails), ha trovato i file .png nella directory .cache/thumbnails, che ahim non conoscevo. Inoltre, sembra che il ciclo if non vada pi, anche se non arriva al numero che ho impostato nella condizione, prosegue cancellando i file. Ho allegato lo script.


P.s.stavo pensando di implementare questo script con uno che utilizzo per gli aggiornamenti, ossia:

Codice: [Seleziona]
#!/bin/bash

echo " + AGGIORNA MIRRORS +"
pacman-mirrors -g
echo
echo " + AGGIORNA SISTEMA +"
pacman -Syyu
echo
echo "        + Fine + "

Una volta lanciato dovrebbe bloccarsi nel caso in cui non trova aggiornamenti; viceversa, se dovessero esserci, deve proseguire anche con la pulizia. Spero di essermi spiegato bene. Ho provato ad abbozzare qualcosa:

Codice: [Seleziona]
#!/bin/bash

echo "prova"

sudo pacman -Suy


stat=`echo $?`
numb=0

if [[ '$stat' != '$numb' ]];
then
echo "Ok"
else
echo "Chiudi"
fi
exit 0

Oppure

Codice: [Seleziona]
#!/bin/bash


agg=`checkupdates | wc -l`

if [[ '$agg' != 0 ]];
then
echo "Ok"
else
echo "Chiudi"
fi
exit 0

« Ultima modifica: Marzo 31, 2017, 12:07:38 pm da Cavecan3m »
- Vaio-SVE1513C1EW - Scheda grafica AMD/ATI Radeon 7550M/7570M/7650M - Intel Pentium 2020M @ 2x 2.4GHz - 4 gb di RAM - SSD SanDisk 240gb - Xubuntu 16.04 LTS - Manjaro 17 LTS

Cubanpit

  • *****
  • 1547
    • pitNtip
Re:Script pulizia
« Risposta #7 il: Marzo 31, 2017, 02:55:55 pm »
Codice: [Seleziona]
if [[ '$agg' != 0 ]];Questo non confronta il numero salvato in agg ma la stringa $agg, perch hai usato gli apostrofi, prova a toglierli o ad utilizzare le doppie virgolette ".
Anche nel codice che hai allegato il problema quello, prova a cercare online una spiegazione delle diverse funzioni che svolgono questi simboli " ' `.

Codice: [Seleziona]
stat=`echo $?`Non sono convinto che pacman ritorni un messaggio di errore se non trova aggiornamenti, mi sembra pi affidabile il metodo che utilizza checkupdates.

Re:Script pulizia
« Risposta #8 il: Marzo 31, 2017, 10:08:21 pm »
Citazione
Questo non confronta il numero salvato in agg ma la stringa $agg, perch hai usato gli apostrofi, prova a toglierli o ad utilizzare le doppie virgolette ".
Anche nel codice che hai allegato il problema quello, prova a cercare online una spiegazione delle diverse funzioni che svolgono questi simboli " ' `.

Ho provato sia con le virgolette che senza, ma continua ad accettare lo script, pur non essendoci effettivamente pi di mille immagini.

Citazione
Non sono convinto che pacman ritorni un messaggio di errore se non trova aggiornamenti, mi sembra pi affidabile il metodo che utilizza checkupdates.

Quindi dovrei fare una cosa del genere:

Codice: [Seleziona]
#!/bin/bash


agg=`checkupdates | wc -l`

if [[ '$agg' != 0 ]];
then
echo "Prosegui..."
echo
echo " + AGGIORNA + "
pacman-mirrors -g
pacman -Syu
else
echo "Chiudi"
fi
exit 0

## il resto dello script...


Confermo, appena aggiornato e pulito il sistema tramite questo script :D
« Ultima modifica: Aprile 02, 2017, 01:11:11 pm da Cavecan3m »
- Vaio-SVE1513C1EW - Scheda grafica AMD/ATI Radeon 7550M/7570M/7650M - Intel Pentium 2020M @ 2x 2.4GHz - 4 gb di RAM - SSD SanDisk 240gb - Xubuntu 16.04 LTS - Manjaro 17 LTS

Cubanpit

  • *****
  • 1547
    • pitNtip
Re:Script pulizia
« Risposta #9 il: Aprile 03, 2017, 10:59:59 am »
Alla riga 23 compare ancora un echo -e che non dovrebbe servire.

Citazione
Ho provato sia con le virgolette che senza, ma continua ad accettare lo script, pur non essendoci effettivamente pi di mille immagini.
Nello script che hai allegato salvi il numero in una variabile di nome stringa, dopodich per avere il valore richiami una variabile di nome num, mai definita nello script.

Il corpo della seconda istruzione if continua a non essere ben indentato a partire dalla riga 85.

Re:Script pulizia
« Risposta #10 il: Aprile 03, 2017, 02:21:26 pm »
Ho nuovamente corretto, allego! Per qualche altra miglioria? Anche a livello estetico e stilistico?  :D
- Vaio-SVE1513C1EW - Scheda grafica AMD/ATI Radeon 7550M/7570M/7650M - Intel Pentium 2020M @ 2x 2.4GHz - 4 gb di RAM - SSD SanDisk 240gb - Xubuntu 16.04 LTS - Manjaro 17 LTS

Cubanpit

  • *****
  • 1547
    • pitNtip
Re:Script pulizia
« Risposta #11 il: Aprile 03, 2017, 03:26:11 pm »
Nella prima parte lo script fa questo:
Cerca pacchetti da aggiornare; se ce ne sono pi di zero aggiornali; altrimenti stampa quanti ce ne sono ed esci.
Non trovo significativo richiamare una variabile per stampare quanti pacchetti sono da aggiornare, perch nella posizione in cui l'hai messo (cio dopo l'altrimenti) i pacchetti da aggiornare sono per forza zero (o minori di zero, ma non possibile).

Per pulire la cache ti consiglio questi due comandi, invece di quello che usi adesso:
Codice: [Seleziona]
paccache -ruk0
paccache -rk2
Cerca di capire cosa fanno prima di aggiungerli allo script, magari pensi che sia meglio modificarli per le tue esigenze.

Infine ti consiglio di cancellare i file .png solo se sono pi vecchi di una certa data, o qualcosa di simile, altrimenti potresti cancellare file che stanno utilizzando le applicazioni aperte in quel momento. Per esempio le applicazioni per riprodurre musica salvano le immagini di copertina degli album nella cartella .cache o nella cartella thumbnails.

Re:Script pulizia
« Risposta #12 il: Aprile 03, 2017, 09:38:39 pm »
Citazione
Nella prima parte lo script fa questo:
Cerca pacchetti da aggiornare; se ce ne sono pi di zero aggiornali; altrimenti stampa quanti ce ne sono ed esci.
Non trovo significativo richiamare una variabile per stampare quanti pacchetti sono da aggiornare, perch nella posizione in cui l'hai messo (cio dopo l'altrimenti) i pacchetti da aggiornare sono per forza zero (o minori di zero, ma non possibile).

Non ho capito bene cosa vuoi dirmi, scusami...Parli della riga 31? Se si, ho aggiunto quella riga per rendere meno monotono lo script. :(
- Vaio-SVE1513C1EW - Scheda grafica AMD/ATI Radeon 7550M/7570M/7650M - Intel Pentium 2020M @ 2x 2.4GHz - 4 gb di RAM - SSD SanDisk 240gb - Xubuntu 16.04 LTS - Manjaro 17 LTS

Cubanpit

  • *****
  • 1547
    • pitNtip
Re:Script pulizia
« Risposta #13 il: Aprile 04, 2017, 02:27:06 pm »
Parlo della riga 30, penso che stampi sempre lo stesso numero per come impostato il ciclo if. Magari sbaglio.

Re:Script pulizia
« Risposta #14 il: Aprile 04, 2017, 10:30:26 pm »
Alla riga 30 il risultato sarebbe sicuro 0! L'ho impostata in modo tale che, nel caso in cui checkupdates non dovesse trovare pacchetti, dovr stamparmi echo -n "Sono stati trovati $agg pacchetti . . .>. Viceversa continuer, aggiornando prima i mirrors poi il sistema. L'ho testato con gli ultimi aggiornamenti fatti 4 giorni fa, se non erro, e funziona alla grande. Tu cosa cambieresti? Grazie per il tempo dedicatomi
- Vaio-SVE1513C1EW - Scheda grafica AMD/ATI Radeon 7550M/7570M/7650M - Intel Pentium 2020M @ 2x 2.4GHz - 4 gb di RAM - SSD SanDisk 240gb - Xubuntu 16.04 LTS - Manjaro 17 LTS