Re: Script complesso per rinominare grandi quantità di file
Inviato: sabato 2 marzo 2013, 11:21
Che broccolo! Ho capito! ls fa il controllo sui file reali.
Il forum della comunità italiana di Ubuntu.
https://forum.ubuntu-it.org/
Fai un riassunto di cosa vorresti ottenere con questo script?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.
Magari stai utilizzando il metodo 'sbagliato'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!
Se avevi il dubbio che fosse sbagliato, perché hai continuato a ripetere a lungo l'errore?King84 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4424315#p4424315][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Sì avevo questo dubbio infatti....qualcuno è in grado di darmi una mano?
"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"
Uno te lo aveva indicato UbuNuovo: http://forum.ubuntu-it.org/viewtopic.ph ... 0#p4386742King84 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4424677#p4424677][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Scusate...ma che test dovrei fare sul mio sistema?
Certo. E il problema è anche stato risolto: si trattava dell'installazione dei driver del touchscreen su un all-in-oneOT: ma è capitato davvero che qualcuno abbia scritto una frase del genere?
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 | moveCodice: 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.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 ottieneCodice: 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"
io lo sono ancora di più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
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 | moveEppure, avevi scritto: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?
sembla che funzioni discretamente.
Qual'è il problema?cos'è tutto quel ".D.D.D.D" alla fine dei file rinominati?!?
Al posto diAltra 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?
Codice: Seleziona tutto
elimina=( "@" ";" ":" )
Codice: Seleziona tutto
elimina=( "@" "stringa1" "stringa2" "e così via")