La vostra opinione su questo codice

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

La vostra opinione su questo codice

Messaggioda eb-ash » martedì 18 giugno 2019, 15:22

Ho creato un script per fare ricerche nel mio archivio di immagini pubblicitarie

Questo è il tree.
Ci sono le cartelle "Epoca":

\ 00's\ -\ 30's
\ 40's
\ 50's
\ 60's
\ 70's

e le sottocartelle Merceologiche che sono tutte di paesi di lingua inglese.
i file hanno come titolo:
"nome del marchio - altre parole..."

e poi ci sono le cartelle miste di vari Paesi.
Questi file hanno all'inizio del titolo delle parole che consentono una archiviazione ordinata secondo i criteri di Paese e Categoria merceologica
così:
"FR (Auto) – nome del marchio - altre parole..."
"FR (Bevande) – nome del marchio - altre parole..."
"FR (Moda) – nome del marchio - altre parole..."
"DE (Auto) – nome del marchio - altre parole..."
etc...



/Volumes/IMMAGINI/IMMAGINI
├── \ 00's\ -\ 30's
│ ├── 00's\ -\ 30's\ ADV\ Alcolici
│ ├── 00's\ -\ 30's\ ADV\ Auto
│ ├── 00's\ -\ 30's\ ADV\ Auto\ Accessori
│ ├── 00's\ -\ 30's\ ADV\ Bevande
│ ├── 00's\ -\ 30's\ ADV\ Food
│ ├── 00's\ -\ 30's\ ADV\ Fumo
│ ├── 00's\ -\ 30's\ ADV\ Igiene\ e\ Persona
│ ├── 00's\ -\ 30's\ ADV\ Moda
│ ├── 00's\ -\ 30's\ ADV\ Moto
│ ├── 00's\ -\ 30's\ ADV\ Tech
│ ├── 00's\ -\ 30's\ ADV\ Turismo
│ ├── 00's\ -\ 30's\ ADV\ Varie
│ └── 00's\ -\ 30's\ ADV:FR:SPA:DE:ITA
├── \ 40's
│ ├── 40's\ ADV\ Alcolici
│ ├── 40's\ ADV\ Auto
│ ├── 40's\ ADV\ Auto\ Accessori
│ ├── 40's\ ADV\ Bevande
│ ├── 40's\ ADV\ Food
│ ├── 40's\ ADV\ Fumo
│ ├── 40's\ ADV\ Igiene\ e\ Persona
│ ├── 40's\ ADV\ Moda
│ ├── 40's\ ADV\ Moto
│ ├── 40's\ ADV\ Tech
│ ├── 40's\ ADV\ Turismo
│ ├── 40's\ ADV\ Varie
│ └── 40's\ ADV:FR:SPA:DE:ITA
├── \ 50's
│ ├── 50's\ ADV\ Alcolici
│ ├── 50's\ ADV\ Auto
│ ├── 50's\ ADV\ Auto\ Accessori
│ ├── 50's\ ADV\ Bevande
│ ├── 50's\ ADV\ Food
│ ├── 50's\ ADV\ Fumo
│ ├── 50's\ ADV\ Igiene\ e\ Persona
│ ├── 50's\ ADV\ Moda
│ ├── 50's\ ADV\ Moto
│ ├── 50's\ ADV\ Tech
│ ├── 50's\ ADV\ Turismo
│ ├── 50's\ ADV\ Varie
│ └── 50's\ ADV:FR:SPA:DE:ITA
├── \ 60's
│ ├── 60's\ ADV\ Alcolici
│ ├── 60's\ ADV\ Auto
│ ├── 60's\ ADV\ Auto\ Accessori
│ ├── 60's\ ADV\ Bevande
│ ├── 60's\ ADV\ DE:FR:SPA
│ ├── 60's\ ADV\ Food
│ ├── 60's\ ADV\ Fumo
│ ├── 60's\ ADV\ Igiene\ e\ Persona
│ ├── 60's\ ADV\ Moda
│ ├── 60's\ ADV\ Moto
│ ├── 60's\ ADV\ Tech
│ ├── 60's\ ADV\ Turismo
│ ├── 60's\ ADV\ Van\ e\ Caravan
│ ├── 60's\ ADV\ Varie
│ └── 60's\ ADV:IT
├── \ 70's
│ ├── 70's\ ADV\ Alcolici
│ ├── 70's\ ADV\ Auto
│ ├── 70's\ ADV\ Auto\ Accessori
│ ├── 70's\ ADV\ Bevande
│ ├── 70's\ ADV\ DE:FR:SPA
│ ├── 70's\ ADV\ Food
│ ├── 70's\ ADV\ Fumo
│ ├── 70's\ ADV\ Igiene\ e\ Persona
│ ├── 70's\ ADV\ Moda
│ ├── 70's\ ADV\ Moto
│ ├── 70's\ ADV\ Tech
│ ├── 70's\ ADV\ Turismo
│ ├── 70's\ ADV\ Van\ e\ Caravan
│ ├── 70's\ ADV\ Varie
│ └── 70's\ ADV:IT

Ora, avendo la necessità di fare ricerche che incrocino tutti questi dati ho elaborato un... manoscripto che funziona molto bene ma c'è un problema

Dato le mie rudimentali conoscenze ci sono molte ripetizioni di codice e quando un giorno dovessi aggiungere delle cartelle per nuove categorie merceologiche e/o Paesi, mi sarebbe molto difficile tornare su un codice molto complesso avendo ormai una veneranda età, avrei bisogno fosse più semplice... :D


Questo è il codice che devo ripetere 12-13 volte per tutte le categorie merceologiche....

Codice: Seleziona tutto

find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -not -path '*/\.*' -type f -iname '*(Varie)*' | wc -l >  /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Varie.txt

find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type d -iname '*ADV Varie' -exec ls -1 "{}" \;| wc -l >  /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Varie\ USA\ UK.txt;

u=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Varie.txt)
v=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Varie\ USA\ UK.txt;)
echo $((u+v))| sed 's/^ */                                                                                VARIE:/'|tee /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES\ *\ Totale\ 00\'s\ -\ 30\'s-Varie.txt

gsed -i 's/\                                                                               //g' /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES\ *\ Totale\ 00\'s\ -\ 30\'s-Varie.txt

contenuto_file=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES\ *\ Totale\ 00\'s\ -\ 30\'s-Varie.txt)
nome_nuovo_file="${contenuto_file}"
echo "$contenuto_file" > /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/RISULTATI\ IMAGES\ ⟨cartella\ automatizzata⟩/"$nome_nuovo_file $(date "+%H,%M %d %B %Y")"


Poi c'è questo, una volta sola
Codice: Seleziona tutto
a=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Alcolici.txt)
b=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Alcolici\ USA\ UK.txt)
c=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Auto.txt)
d=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Auto\ USA\ UK.txt)
e=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Bevande.txt)
f=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Bevande\ USA\ UK.txt)
A=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Food.txt)
B=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Food\ USA\ UK.txt)
g=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Fumo.txt)
h=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Fumo\ USA\ UK.txt)
i=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Auto\ Accessori.txt)
j=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Auto\ Accessori\ USA\ UK.txt)
k=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Igiene\ e\ Persona.txt)
l=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Igiene\ e\ Persona\ USA\ UK.txt)
m=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Moda.txt)
n=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Moda\ USA\ UK.txt)
o=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Moto.txt)
p=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Moto\ USA\ UK.txt)
q=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Tech.txt)
r=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Tech\ USA\ UK.txt)
C=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Turismo.txt)
D=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Turismo\ USA\ UK.txt)
u=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Varie.txt)
v=$(cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Varie\ USA\ UK.txt)
echo $((a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+A+B+C+D))| sed 's/^ */                                                                                TOTALE ADS:/'|tee /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES\ *\ Totale\ 00\'s\ -\ 30\'s-ADS.txt


e poi questo ripetuto di nuovo 12-13 volte, che assegna i dati ai vari Paesi cercando negli output salvati gli iname con la parola merceologica e la sigla del Paese e crea un output impaginato. I risultati =0 non vengono stampati.

Codice: Seleziona tutto
cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES\ *\ Totale\ 00\'s\ -\ 30\'s-Varie.txt | sed 's/^ */                                                                                TOTALE /'
echo
cat /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/MY\ IMAGES-SCRIPT\ 1.0-ELEMENTI/VARIABILI/IMAGES-SCRIPTBASE-00\'s\ -\ 30\'s-Varie\ USA\ UK.txt | sed 's/^ */                                                                                UK-USA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*AG (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                ARGENTINA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*AT (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                AUSTRIA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*BE (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                BELGIO /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*BR (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                BRASILE /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*CK (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                CECOSLOVACCHIA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*CR (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                CROAZIA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*DK (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                DANIMARCA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*FI (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                FINLANDIA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*FR (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                FRANCIA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*DE (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                GERMANIA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*JA (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                GIAPPONE /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*GR (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                GRECIA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*IS (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                ISRAELE /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*IT (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                ITALIA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*NL (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                NORVEGIA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*NO (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                OLANDA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*PT (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                PORTOGALLO /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*RO (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                ROMANIA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*RU (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                RUSSIA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*SP (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                SPAGNA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*SL (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                SRI-LANKA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*SA (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                SUDAFRICA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*SW (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                SVEZIA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*CH (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                SVIZZERA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*HU (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                UNGHERIA /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*UR (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                URUGUAY /'
find /Volumes/IMMAGINI/IMMAGINI/\ 00\'s\ -\ 30\'s/ -type f -not -path '*/\.*' -iname '*YU (Varie)*' | wc -l | grep -v '^ *0$' |  sed 's/^ */                                                                                YUGOSLAVIA /'



Questo è il risultato stampato. (Tutte le parti relative all'estetica le ho escluse).

https://i.imgur.com/um7Lcgj.jpg


Ditemi voi! Pensate si possa fare di meglio? Magari no e allora dormo... in pace nel mio sacello... In pace si far per dire... :p

Se sì, non voglio la pappa pronta! Ho solo bisogno di una dritta, poi ho tutto il tempo... :D

NB: Grazie per avermi insegnato tante cose e per l'ospitalità!
si è vero uso un mac. Ma detesto i maccisti del web. Se la tirano, non ti aiutano, sono abituati ad avere la pappa fatta e non costruirsi le cose, e sono troppo pochi... quando serve non ci sono mai. Voglio imparare un po' di Bash per fare tante cose utili perchè questo sono qua... senza formazione specifica ma in fondo è unix che permette di fare le cose a pezzetti, no?
Avatar utente
eb-ash
Prode Principiante
 
Messaggi: 101
Iscrizione: febbraio 2019
Sesso: Maschile

Re: La vostra opinione su questo codice

Messaggioda UbuNuovo » martedì 18 giugno 2019, 17:58

Non posso dire di aver compreso tutto, ma normalmente le ripetizioni di codice possono essere evitate con dei cicli e/o utilizzando delle funzioni.

Normalmente è bene evitare di eseguire più volte il comando "find" sulle stesse directory, conviene fare una ricerca più generale e poi attraverso un ciclo sui risultati si possono filtrare i dati voluti e compiere le elaborazioni adeguate.

Ho visto che salvi ogni risultato dei conteggi su un file di testo, poi assegni il contenuto di ogni file ad una variabile e alla fine sommi i valori delle variabili. Ma ti servono per altri motivi quei file? Altrimenti potresti assegnare direttamente alle variabili i risultati dei conteggi:
Codice: Seleziona tutto
u=$(find /Volumes...| wc -l)

In ogni modo conviene dare alle variabili dei nomi che ti aiutino a capirne il contenuto.

Ti consiglierei di studiare i cicli, in particolare il ciclo 'while' con 'read' Es.:
while read riga;do codice_per_elaborazioni_su "$riga";done < <(comando)
e le funzioni.

Ti conviene fare delle prove su una struttura di dati semplice in modo da capirne bene il funzionamento.
Per il filtraggio dei dati fai pratica con 'grep' e 'AWK'.
Vedo che hai 'gsed', dovrebbe essere compatibile con il 'sed' di Ubuntu; per avere riscontri utili con noi linuxiani ti converrebbe installare anche gli altri strumenti in versione GNU (cioè anche AWK e grep (o pgrep)).
Fatta un po' di pratica, vedrai che potrai semplificare il codice di molto, in modo da renderlo più efficiente e più facilmente gestibile.
Nel caso in cui sia il primo a rispondere ad una richiesta di aiuto...chiunque abbia una soluzione migliore o anche solo diversa dalla mia è incoraggiato ad intervenire liberamente senza inviarmi alcun messaggio privato. In programmazione è basilare sapere che si può ottenere il medesimo risultato utilizzando metodi diversi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 3374
Iscrizione: dicembre 2009
Desktop: Mate
Distribuzione: Ubuntu 14.04
Sesso: Maschile

Re: La vostra opinione su questo codice

Messaggioda eb-ash » giovedì 20 giugno 2019, 19:42

UbuNuovo Immagine ha scritto:N
Ho visto che salvi ogni risultato dei conteggi su un file di testo, poi assegni il contenuto di ogni file ad una variabile e alla fine sommi i valori delle variabili. Ma ti servono per altri motivi quei file? Altrimenti potresti assegnare direttamente alle variabili i risultati dei conteggi:
Codice: Seleziona tutto
u=$(find /Volumes...| wc -l)

In ogni modo conviene dare alle variabili dei nomi che ti aiutino a capirne il contenuto.


Per le variabili, ho recepito. D'altronde bisognava avere i pippistrelli davanti agli occhi per non accorgersene!
Certo, non ho il dono della programmazione... :(


UbuNuovo Immagine ha scritto:Ti consiglierei di studiare i cicli, in particolare il ciclo 'while' con 'read' Es.:
while read riga;do codice_per_elaborazioni_su "$riga";done < <(comando)


Sui cicli sto incominciando a studiare. Quando scrivi "riga" cosa intendi? :shy:
si è vero uso un mac. Ma detesto i maccisti del web. Se la tirano, non ti aiutano, sono abituati ad avere la pappa fatta e non costruirsi le cose, e sono troppo pochi... quando serve non ci sono mai. Voglio imparare un po' di Bash per fare tante cose utili perchè questo sono qua... senza formazione specifica ma in fondo è unix che permette di fare le cose a pezzetti, no?
Avatar utente
eb-ash
Prode Principiante
 
Messaggi: 101
Iscrizione: febbraio 2019
Sesso: Maschile

Re: La vostra opinione su questo codice

Messaggioda UbuNuovo » giovedì 20 giugno 2019, 20:09

eb-ash Immagine ha scritto:...
Certo, non ho il dono della programmazione... :(...

Non ti preoccupare, nessuno nasce programmatore! :)
Per il resto ti rispondo con il codice:
Codice: Seleziona tutto
8-) testo="Questo è un testo multiriga, questa è la prima
> per dimostrare che 'while read riga' 'legge' una riga per volta
> in questo caso, eseguo 'echo \$riga' per far vedere cosa succede ad ogni ciclo.
> Come puoi vedere la variabile '\$riga' ad ogni ciclo assume come valore la riga corrente.
> Ad ogni ciclo viene stampata la riga corrente dalla prima all'ultima,
> quando le righe di testo finiscono, read non legge niente e il ciclo viene concluso.
> Il nome della variabile lo puoi scegliere come ti pare."
8-)
8-) while read riga; do echo "$riga"; done <<< "$testo"
Questo è un testo multiriga, questa è la prima
per dimostrare che 'while read riga' 'legge' una riga per volta
in questo caso, eseguo 'echo $riga' per far vedere cosa succede ad ogni ciclo.
Come puoi vedere la variabile '$riga' ad ogni ciclo assume come valore la riga corrente.
Ad ogni ciclo viene stampata la riga corrente dalla prima all'ultima,
quando le righe di testo finiscono, read non legge niente e il ciclo viene concluso.
Il nome della variabile lo puoi scegliere come ti pare.
8-)


Puoi passare i dati al ciclo 'while read' in vari modi, dipende da dove deriva il testo (CON BASH); per esempio:
Codice: Seleziona tutto
COMANDO | while ....done
while ....done < <(COMANDO)
while ....done < file.txt
while ....done <<< "$VARIABILE"
Nel caso in cui sia il primo a rispondere ad una richiesta di aiuto...chiunque abbia una soluzione migliore o anche solo diversa dalla mia è incoraggiato ad intervenire liberamente senza inviarmi alcun messaggio privato. In programmazione è basilare sapere che si può ottenere il medesimo risultato utilizzando metodi diversi.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 3374
Iscrizione: dicembre 2009
Desktop: Mate
Distribuzione: Ubuntu 14.04
Sesso: Maschile


Torna a Programmazione

Chi c’è in linea

Visualizzano questa sezione: 0 utenti registrati e 3 ospiti