Pagina 3 di 4

Re: Script complesso per rinominare grandi quantità di file

Inviato: sabato 2 marzo 2013, 11:21
da UbuNuovo
Che broccolo! Ho capito! ls fa il controllo sui file reali.

Re: Script complesso per rinominare grandi quantità di file

Inviato: lunedì 13 maggio 2013, 12:33
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.

Re: Script complesso per rinominare grandi quantità di file

Inviato: lunedì 13 maggio 2013, 14:08
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

Re: Script complesso per rinominare grandi quantità di file

Inviato: lunedì 13 maggio 2013, 14:21
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?

Re: Script complesso per rinominare grandi quantità di file

Inviato: martedì 16 luglio 2013, 18:05
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!

Re: Script complesso per rinominare grandi quantità di file

Inviato: mercoledì 17 luglio 2013, 8:02
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

Re: Script complesso per rinominare grandi quantità di file

Inviato: mercoledì 17 luglio 2013, 17:00
da King84
Sì avevo questo dubbio infatti....qualcuno è in grado di darmi una mano?

Re: Script complesso per rinominare grandi quantità di file

Inviato: giovedì 18 luglio 2013, 8:25
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:

Re: Script complesso per rinominare grandi quantità di file

Inviato: giovedì 18 luglio 2013, 13:37
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"

Re: Script complesso per rinominare grandi quantità di file

Inviato: giovedì 18 luglio 2013, 15:29
da King84
Scusate...ma che test dovrei fare sul mio sistema?

Re: Script complesso per rinominare grandi quantità di file

Inviato: venerdì 19 luglio 2013, 10:18
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

Re: Script complesso per rinominare grandi quantità di file

Inviato: venerdì 19 luglio 2013, 13:22
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

Re: Script complesso per rinominare grandi quantità di file

Inviato: venerdì 19 luglio 2013, 15:45
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.

Re: Script complesso per rinominare grandi quantità di file

Inviato: domenica 21 luglio 2013, 15:24
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

Re: Script complesso per rinominare grandi quantità di file

Inviato: lunedì 22 luglio 2013, 23:53
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?

Re: Script complesso per rinominare grandi quantità di file

Inviato: mercoledì 24 luglio 2013, 17:30
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!

Re: Script complesso per rinominare grandi quantità di file

Inviato: martedì 26 novembre 2013, 13:37
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?

Re: Script complesso per rinominare grandi quantità di file

Inviato: mercoledì 27 novembre 2013, 23:13
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.

Re: Script complesso per rinominare grandi quantità di file

Inviato: sabato 30 novembre 2013, 13:33
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.
;)

Re: Script complesso per rinominare grandi quantità di file

Inviato: sabato 18 gennaio 2014, 18:53
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=( "@" ";" ":" )")
?