Script complesso per rinominare grandi quantità di file

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Script complesso per rinominare grandi quantità di file

Messaggio da UbuNuovo »

Che broccolo! Ho capito! ls fa il controllo sui file reali.
Salva l'Ucraina! 🇺🇦
King84

Re: Script complesso per rinominare grandi quantità di file

Messaggio da King84 »

Sono passati ormai 11 mesi da quando ho scritto questo thread.
Ancora non ho trovato una soluzione e ogni giorno sto facendo prove su prove per riuscire a risolvere il problema di questo script.
Se qualcuno ha idea di come aiutarmi, gli sarò grato per sempre.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Script complesso per rinominare grandi quantità di file

Messaggio da UbuNuovo »

Se non guardi cosa ti viene scritto!
Questo funziona http://forum.ubuntu-it.org/viewtopic.php?f=33&t=528225&start=20#p4331037

L'unica cosa è che non si può fare la verifica con l'echo perché i file devono essere rinominati realmente per avere la giusta esecuzione dello script.

Semmai prima provalo su una copia dei file.
Ciao
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Script complesso per rinominare grandi quantità di file

Messaggio da vaeVictis »

King84 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4386691#p4386691][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Sono passati ormai 11 mesi da quando ho scritto questo thread.
Ancora non ho trovato una soluzione e ogni giorno sto facendo prove su prove per riuscire a risolvere il problema di questo script.
Se qualcuno ha idea di come aiutarmi, gli sarò grato per sempre.
Fai un riassunto di cosa vorresti ottenere con questo script?
A che punto siete e quali sono i problemi aperti?
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
King84

Re: Script complesso per rinominare grandi quantità di file

Messaggio da King84 »

E' passato più di un anno da quando ho aperto questo topic: ancora nessuna soluzione. Ogni giorno, da allora, per ore e ore provo a trovare il risultato giusto, compilando, ma ancora niente.
Se qualcuno ha idea di come risolverlo, gli sarò grato ab aeternum!
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: Script complesso per rinominare grandi quantità di file

Messaggio da cristian_c »

King84 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4423863#p4423863][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:E' passato più di un anno da quando ho aperto questo topic: ancora nessuna soluzione. Ogni giorno, da allora, per ore e ore provo a trovare il risultato giusto, compilando, ma ancora niente.
Se qualcuno ha idea di come risolverlo, gli sarò grato ab aeternum!
Magari stai utilizzando il metodo 'sbagliato' :p
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
King84

Re: Script complesso per rinominare grandi quantità di file

Messaggio da King84 »

Sì avevo questo dubbio infatti....qualcuno è in grado di darmi una mano?
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: Script complesso per rinominare grandi quantità di file

Messaggio da cristian_c »

Se avevi il dubbio che fosse sbagliato, perché hai continuato a ripetere a lungo l'errore? :p
Può darsi che io sia 'brutto e cattivo', ma non hai intenzione di fornire feedback alle soluzioni date anche da altri utenti e rispondere alle loro domande :nono:

Se io fossi nei tuoi panni, farei ciò che mi è stato richiesto. Il problema si risolverebbe in pochissimo tempo invece che trascinarsi all'infinito. Magari io avessi più spesso qualcuno disponibile come gli utenti che hanno scritto in questo topic :sisi:
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Script complesso per rinominare grandi quantità di file

Messaggio da UbuNuovo »

@cristian_c pienamente d'accordo con te!

OT: ma è capitato davvero che qualcuno abbia scritto una frase del genere?
"Ho provato ad installare quello da te suggerito.. ma non me lo fa installare.. allora ho disinstallato il driver e ho provato ad installare quello che mi hai suggerito.. e me lo fa installare.. però è installato senza driver.. A sto puntoo ho disinstallato quello da te suggerito e reinstallato il driver.. Col driver installato se provo ad installare quello che mi hai suggerito da errore"
Salva l'Ucraina! 🇺🇦
King84

Re: Script complesso per rinominare grandi quantità di file

Messaggio da King84 »

Scusate...ma che test dovrei fare sul mio sistema?
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: Script complesso per rinominare grandi quantità di file

Messaggio da cristian_c »

Uno te lo aveva indicato UbuNuovo: http://forum.ubuntu-it.org/viewtopic.ph ... 0#p4386742 :sisi:
OT: ma è capitato davvero che qualcuno abbia scritto una frase del genere?
Certo. E il problema è anche stato risolto: si trattava dell'installazione dei driver del touchscreen su un all-in-one :D
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
King84

Re: Script complesso per rinominare grandi quantità di file

Messaggio da King84 »

Ciao

Codice: Seleziona tutto

#!/bin/bash

### blocco per creare la struttura di prova ###
#rm -rf "$1"
#mkdir "$1"
#touch "$1/abc 123.jpeg" "$1/abc_123.jpg" "$1/abc_123@.jpg" "$1/abc-123@.jpg" "$1/abc-123@.JPG"
#exit
### fine blocco per creare la struttura di prova ###

reset

# qua i simboli da eliminare
elimina=( "@" ";" ":" )
suff='.D'
   
controlla_esistenza(){
      elenco_file="$(ls ${path}/)" # ho usato ls per chiarire
      for f in $elenco_file;do
         if [[ "$nwfile" == "$f" ]]
            then
               nwfile=${nwfile}$suff
         fi
      done
}


    move() {
      while read file ; do
     
        nwfile=${file##*/}
        path=${file%/*}
       
        for i in ${elimina[@]}; do
       nwfile="${nwfile//$i/}"
        done
       
      
      # Inserisci qua le tue sostituzioni:
         nwfile=$(echo "$nwfile" | tr [:upper:] [:lower:] )
         nwfile="${nwfile// /_}"
        nwfile="${nwfile//-/_}"
        nwfile="${nwfile//.jpeg/.jpg}"

   controlla_esistenza
      
        mv -v "$file" "${path}/${nwfile}" 2>/dev/null
       
      done
    }

    find $1 -type d -print | move
    find $1 -type f -print | move
sembla che funzioni discretamente. Una cosa non riesco a capire:

se si ottiene

Codice: Seleziona tutto

"img/abc_123@.jpg" -> "img/abc_123.jpg.D"
"img/abc 123.jpeg" -> "img/abc_123.jpg.D.D"
"img/abc-123@.jpg" -> "img/abc_123.jpg.D.D.D"
"img/abc-123@.JPG" -> "img/abc_123.jpg.D.D.D.D"
"img/abc_123.jpg" -> "img/abc_123.jpg.D.D.D.D.D"
cos'è tutto quel ".D.D.D.D" alla fine dei file rinominati?!?
Altra cosa: lo script fa discretamente la sostituzione di un carattere con un altro e la cancellazione di un carattere specificato...ma... io vorrei che lo script eliminasse e sostituisse anche stringhe, non solo caratteri. come si fa?
Comunque grazie
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Script complesso per rinominare grandi quantità di file

Messaggio da crap0101 »

King84 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4425091#p4425091][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Una cosa non riesco a capire:

se si ottiene

Codice: Seleziona tutto

"img/abc_123@.jpg" -> "img/abc_123.jpg.D"
"img/abc 123.jpeg" -> "img/abc_123.jpg.D.D"
"img/abc-123@.jpg" -> "img/abc_123.jpg.D.D.D"
"img/abc-123@.JPG" -> "img/abc_123.jpg.D.D.D.D"
"img/abc_123.jpg" -> "img/abc_123.jpg.D.D.D.D.D"
nella funzione "controlla_esistenza" la variabile "$nwfile" inizialmente sarà uguale al valore che ha in quel momento e da lì in poi tornerà *sempre* falso e aggiungerai in ogni caso il suffisso. Peggio ancora, "$nwfile" da quel momento lo usi (senza resettarlo) anche per i file successivi, il che ti porta come vedi a una rinominazione errata. Per controllare l'esistenza dovresti fare come avevo suggerito vari post fa, che è sensibilmente diverso.
Per non parlare di variabili globali come nwfile e path usate e modificate nelle funzioni dove invece sarebbe meglio passarle e ritornarle esplicitamente.
Inoltre il modo di creare $elenco_file ha i soliti problemi nel caso di nomi contenenti spazi, le alternative sono sempre quelle.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
King84

Re: Script complesso per rinominare grandi quantità di file

Messaggio da King84 »

D'accordo....ma allora è sbagliato il tuo script che ho ripreso due post fa?
Non riesco a capire se quella che mi hai dato e che ti ho riportato due post fa è la soluzione definitiva o semplicemente uno studio sugli errori del tuo script, errori che non sono risolvibili a quanto pare?

:( sono confuso
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Script complesso per rinominare grandi quantità di file

Messaggio da crap0101 »

King84 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4425941#p4425941][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:D'accordo....ma allora è sbagliato il tuo script che ho ripreso due post fa?
Non riesco a capire se quella che mi hai dato e che ti ho riportato due post fa è la soluzione definitiva o semplicemente uno studio sugli errori del tuo script, errori che non sono risolvibili a quanto pare?

:( sono confuso
io lo sono ancora di più :-D
Non so a cosa ti riferisci, l'unico esempio in *pseudocodice* che ho postato riguardante il controllo dellìesistenza di un path si trova qui: http://forum.ubuntu-it.org/viewtopic.ph ... 0#p4250706
ed è _decisamente_ diverso da quanto hai prodotto. Pur essendo pseudocodice - per cui ovviamente NON va preso alla lettera - se ti sei "ispitato" a quello... non so come hai fatto ad arrivare all'altro.

Quali sarebbero gli errori irrisolvibili?
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
King84

Re: Script complesso per rinominare grandi quantità di file

Messaggio da King84 »

Ricapitolando: che cosa devo modificare nel seguente script

Codice: Seleziona tutto

    #!/bin/bash

    ### blocco per creare la struttura di prova ###
    #rm -rf "$1"
    #mkdir "$1"
    #touch "$1/abc 123.jpeg" "$1/abc_123.jpg" "$1/abc_123@.jpg" "$1/abc-123@.jpg" "$1/abc-123@.JPG"
    #exit
    ### fine blocco per creare la struttura di prova ###

    reset

    # qua i simboli da eliminare
    elimina=( "@" ";" ":" )
    suff='.D'
       
    controlla_esistenza(){
          elenco_file="$(ls ${path}/)" # ho usato ls per chiarire
          for f in $elenco_file;do
             if [[ "$nwfile" == "$f" ]]
                then
                   nwfile=${nwfile}$suff
             fi
          done
    }


        move() {
          while read file ; do
         
            nwfile=${file##*/}
            path=${file%/*}
           
            for i in ${elimina[@]}; do
           nwfile="${nwfile//$i/}"
            done
           
         
          # Inserisci qua le tue sostituzioni:
             nwfile=$(echo "$nwfile" | tr [:upper:] [:lower:] )
             nwfile="${nwfile// /_}"
            nwfile="${nwfile//-/_}"
            nwfile="${nwfile//.jpeg/.jpg}"

       controlla_esistenza
         
            mv -v "$file" "${path}/${nwfile}" 2>/dev/null
           
          done
        }

        find $1 -type d -print | move
        find $1 -type f -print | move
per far sì che segua queste quattro uniche regole?
1) Eliminare da ogni nome alcuni caratteri singoli (ad esempio eliminare il carattere @)
2) Sostituire da ogni nome alcune stringhe con altre (ad esempio sostituire a ".jpeg" la stringa ".jpg")
3) Dalla cartella dove viene lanciato, deve entrare ricorsivamente dentro ogni sottocartella
4) Ovviamente non eliminare alcun file!
King84

Re: Script complesso per rinominare grandi quantità di file

Messaggio da King84 »

E' ormai passato un anno e mezzo da quando ho aperto questo thread ed ancora non ho trovato soluzione.
Qualcuno è in grado di aiutarmi?
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: Script complesso per rinominare grandi quantità di file

Messaggio da cristian_c »

King84 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4492364#p4492364][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:E' ormai passato un anno e mezzo da quando ho aperto questo thread ed ancora non ho trovato soluzione.
Qualcuno è in grado di aiutarmi?
Eppure, avevi scritto:
sembla che funzioni discretamente.
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: Script complesso per rinominare grandi quantità di file

Messaggio da melfnt »

Provo a risponderti io (scusatemi).
cos'è tutto quel ".D.D.D.D" alla fine dei file rinominati?!?
Qual'è il problema?
Potrebbero esserci due file che dopo la modifica avrebbero lo stesso nome.
Quindi, dopo la rinomina sia "ciao@.jpg" che "ciao.jpeg" diventerebbero "ciao.jpg".
Questo non va bene, perché altrimenti uno dei due file verrebbe eliminato.

Qual'è la soluzione?
modificare il nome di uno di questi due file.
Come?
semplice: controllando PRIMA di rinominare un file se esiste già un file con lo stesso nome.
Quindi, se esiste già un file che si chiama "ciao.jpg", lo script salva su "ciao.jpg.D".
Se esiste già "ciao.jpg.D", allora salva "ciao.jpg.D.D" e così via.

Cos'è che non capisci/non va bene in questo?
Altra cosa: lo script fa discretamente la sostituzione di un carattere con un altro e la cancellazione di un carattere specificato...ma... io vorrei che lo script eliminasse e sostituisse anche stringhe, non solo caratteri. come si fa?
Al posto di

Codice: Seleziona tutto

elimina=( "@" ";" ":" )
metti

Codice: Seleziona tutto

elimina=( "@" "stringa1" "stringa2" "e così via")
poi: FAI UNA COPIA DELL'INTERA CARTELLA con i file e provi lo script, per verificarne il funzionamento.
Se qualcosa dovesse non funzionare, facci sapere.

Guarda anche qui. Non è proprio il tuo stesso problema, ma potresti trovare spunti interessanti.
;)
King84

Re: Script complesso per rinominare grandi quantità di file

Messaggio da King84 »

Ciao,
grazie, ma non funziona. Mi ha cancellato permanentemente alcuni file che sarebbero dovuti rimanere.
Non sarebbe meglio mettere:
elimina=( "@" "stringa1" "stringa2" "e così via" "elimina=( "@" ";" ":" )")
?
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 7 ospiti