La vostra opinione su questo codice

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
eb-ash
Prode Principiante
Messaggi: 204
Iscrizione: lunedì 18 febbraio 2019, 18:02
Sesso: Maschile

La vostra opinione su questo codice

Messaggio da eb-ash »

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
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: La vostra opinione su questo codice

Messaggio da UbuNuovo »

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.
Salva l'Ucraina! 🇺🇦
Avatar utente
eb-ash
Prode Principiante
Messaggi: 204
Iscrizione: lunedì 18 febbraio 2019, 18:02
Sesso: Maschile

Re: La vostra opinione su questo codice

Messaggio da eb-ash »

UbuNuovo [url=https://forum.ubuntu-it.org/viewtopic.php?p=5139306#p5139306][img]https://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] 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 [url=https://forum.ubuntu-it.org/viewtopic.php?p=5139306#p5139306][img]https://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] 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
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: La vostra opinione su questo codice

Messaggio da UbuNuovo »

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"
Salva l'Ucraina! 🇺🇦
Avatar utente
eb-ash
Prode Principiante
Messaggi: 204
Iscrizione: lunedì 18 febbraio 2019, 18:02
Sesso: Maschile

Re: La vostra opinione su questo codice

Messaggio da eb-ash »

Ho visto che posso mettere dentro una funzione una ricerca di find, ma non riesco a renderla disponibile per i miei usi.

Ad es.

Codice: Seleziona tutto

function miafunzione()
{
find /PATH/

}

miafunzione | wc -l
e fin qui funziona, mi dà il valore.

Ma come faccio ad agganciargli un comando? Ad es:

Codice: Seleziona tutto

type f -iname ecc..
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
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: La vostra opinione su questo codice

Messaggio da UbuNuovo »

Come al solito, dovresti sforzarti di spiegare meglio quello che vuoi ottenere.
Se per "agganciare" intendi poter modificare le opzioni di find, si può fare.
Le funzioni accettano parametri passati sequenzialmente, separati da spazi.
Ti faccio un esempio, dove il path e il tipo di ricerca (case insensitive) sono fissi, mentre è possibile scegliere: "tipo di file" e "nome dei file" da cercare.
I parametri passati alla funzione diventeranno i valori delle due opzioni -type e -iname.
Prova questo script "cerca_con_parametri.sh":

Codice: Seleziona tutto

#!/bin/bash

path="$HOME/Immagini/Foto"

function cerca_varie(){
	# richiede due parametri: il primo il tipo di file, il secondo il nome del file
	tipo="$1"
	da_cercare="$2"
	find "$path" -type "$tipo" -iname "$da_cercare" -print
}

echo "Il numero di file jpg, nella directory \"$path\", è: $(cerca_varie f "*.jpg" | wc -l)"
echo "Il numero di file jpg, nella directory \"$path\", è: $(cerca_varie f "*.png" | wc -l)"
echo "Il numero di directory con nome che inizia per \"s\" in $path, è: $(cerca_varie d "s*" | wc -l)"
Con la stessa funzione posso fare più tipi di ricerca. Ottengo:

Codice: Seleziona tutto

8-) ./cerca_con_parametri.sh
Il numero di file jpg, nella directory "/home/giovanni/Immagini/Foto", è: 227
Il numero di file jpg, nella directory "/home/giovanni/Immagini/Foto", è: 91
Il numero di directory con nome che inizia per "s" in /home/giovanni/Immagini/Foto, è: 5
8-) 
Naturalmente modificando la funzione puoi scegliere tu quali parametri passargli, puoi anche mettere insieme più opzioni, per esempio

Codice: Seleziona tutto

par='-type f  -name "*.xcf"'
nome_funzione "$par"
Spero di aver indovinato la tua richiesta.
Salva l'Ucraina! 🇺🇦
Avatar utente
eb-ash
Prode Principiante
Messaggi: 204
Iscrizione: lunedì 18 febbraio 2019, 18:02
Sesso: Maschile

Re: La vostra opinione su questo codice

Messaggio da eb-ash »

Funziona bene! Ho dovuto fare una modifiche che ti mostro

il verbo mostro cade a fagiolo nel mio caso :p ...

Anzichè

Codice: Seleziona tutto

path="$HOME/Immagini/Foto"

Codice: Seleziona tutto

mypath=$(ls /Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/ELABORAZIONIPROVAUFF/FILE)
Ho dovuto mettere l'

Codice: Seleziona tutto

ls
. Continuava a dirmi che non trovava file o directory così m'è venuta in mente sta pensata. E ho dovuto mettere le parentesi perchè continuava a dare risultato 1.
Non hai idea quante ore a trovare la mescolata giusta!

Adesso mi metto a ricostruire lo script 2.0, incomincio col mettere tutto dentro funzioni e poi penso che capirò come usare i cicli ... grazie!!!!!



Immagine
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
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: La vostra opinione su questo codice

Messaggio da UbuNuovo »

Quel ls non mi convince per niente! :nono:
Credo che il problema dipenda dal non aver quotato il percorso o la variabile "$mypath".
Nei tuoi post quoti gli spazi con '\' ti consiglio invece di racchiudere sempre: percorsi, variabili e valori delle opzioni, tra apici, singoli o doppi, a seconda delle esigenze. È più semplice, si fa prima e si vede a colpo d'occhio se un percorso o una variabile sono stati quotati o meno.
(Comunque dovresti evitare di avere spazi nei nomi di file e directory).
Quindi, invece di scrivere:

Codice: Seleziona tutto

mypath=/Volumes/IMMAGINI/Users/EB/Documents/fare\ back\ up/SHELL/ELABORAZIONIPROVAUFF/FILE
usa

Codice: Seleziona tutto

mypath='/Volumes/IMMAGINI/Users/EB/Documents/fare back up/SHELL/ELABORAZIONIPROVAUFF/FILE'
e quando usi la variabile mettila tra apici doppi, per esempio:

Codice: Seleziona tutto

find "$mypath" ....
Prova e fai sapere.
Salva l'Ucraina! 🇺🇦
Avatar utente
eb-ash
Prode Principiante
Messaggi: 204
Iscrizione: lunedì 18 febbraio 2019, 18:02
Sesso: Maschile

Re: La vostra opinione su questo codice

Messaggio da eb-ash »

La quota degli spazi nasce dal fatto che i percorsi delle cartelle non li scrivo a mano ma li ricavo trascinando le cartelle nella shell del Terminale ed è il programma che mette i

Codice: Seleziona tutto

'\'
poi faccio copia e incolla, proprio per evitare errori.
Ho provato e toglierle e non funziona nulla anche mettendo apici o doppiapici.

I nomi complicati che uso purtroppo hanno una loro ragione: i nomi devono scorrere sullo schermo del TV attraverso il mediabox, per cui vedere dei titoli senza spazi, con gli underscore risulterebbe troppo tecnico quindi brutto. So che mi costano molta fatica questi aspetti

La cosa che mi hai detto sull'

Codice: Seleziona tutto

'ls'
ho provato ad approfondirla ma come ti ho detto me li mette la shell, forse è una cosa dovuta alla piattaforma? Può creare dei problemi?
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?
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Majestic-12 [Bot] e 10 ospiti