Script complesso per rinominare grandi quantità di file
- Laycastle
- Entusiasta Emergente

- Messaggi: 1183
- Iscrizione: sabato 9 aprile 2011, 21:54
- Desktop: KDE 4.8
- Distribuzione: Gentoo ~amd64
- Località: Torino
Re: Script complesso per rinominare grandi quantità di file
sono stato assente un bel po' dal forum, se ti serve ancora dimmelo che riprendo in mano lo script.
-
King84
Re: Script complesso per rinominare grandi quantità di file
sì sono ancora fermo al punto di partenza, ne' so come andare avanti.
Mi insegneresti per favore a creare questo script? Grazie
-
King84
Re: Script complesso per rinominare grandi quantità di file
Grazie
-
King84
Re: Script complesso per rinominare grandi quantità di file
Grazie!
- crap0101
- 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
Per quello basterebbe aggiungere al codice un controllo che rinomina ulteriormente il file fino a quando non trova un nome "libero".
si potrebbe aggiungere una funzione da chiamare al'interno di move(), prima della effettiva rinominazione, una roba tipo:
Codice: Seleziona tutto
funzione controlla (path) {
fino a quando path esiste:
path = path + suffisso_a_scelta
restituisci il nuovo path
}
- 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
non sono capace di creare una roba tipo quella scritta nel codice qui sopra, grazie comunque.
Laycastle, grazie, però non funziona a dovere: facendo dei test su una cartella con tanti file fittizi, me ne ha cancellati parecchi che sarebbero dovuti rimanere.
- cristian_c
- Accecante Asceta

- Messaggi: 23422
- Iscrizione: lunedì 29 ottobre 2007, 11:31
Re: Script complesso per rinominare grandi quantità di file
Hai parlato di una 'roba tipo' a quella indicata nello pseudo-codice di crap. Ma qual'è esattamente il codice che hai usato?King84 » [url=http://forum.ubuntu-it.org/viewtopic.php?p=4263920#p4263920]oggi, 8:22[/url] ha scritto:Ciao a tutti,
non sono capace di creare una roba tipo quella scritta nel codice qui sopra, grazie comunque.
Laycastle, grazie, però non funziona a dovere: facendo dei test su una cartella con tanti file fittizi, me ne ha cancellati parecchi che sarebbero dovuti rimanere.
-
King84
Re: Script complesso per rinominare grandi quantità di file
Codice: Seleziona tutto
funzione controlla (path) {
fino a quando path esiste:
path = path + suffisso_a_scelta
restituisci il nuovo path
}- cristian_c
- Accecante Asceta

- Messaggi: 23422
- Iscrizione: lunedì 29 ottobre 2007, 11:31
Re: Script complesso per rinominare grandi quantità di file
King84 » [url=http://forum.ubuntu-it.org/viewtopic.php?p=4266296#p4266296]ieri, 23:31[/url] ha scritto:tipoma non sono capace di scrivere codice, l'ho già cancellato il file, non mi ricordo come era fatto dentro esattamente!Codice: Seleziona tutto
funzione controlla (path) { fino a quando path esiste: path = path + suffisso_a_scelta restituisci il nuovo path }
Codice: Seleziona tutto
check() {
path=$1
suffix="quello_che_vuoi_tu"
while [ -d "$path" ] ; do
path="$path$suffix"
done
return $path
}Codice: Seleziona tutto
check path- crap0101
- 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
in bash l'unica cosa che si "returna" è lo stato d'uscita.cristian_c ha scritto:Codice: Seleziona tutto
check() { path=$1 suffix="quello_che_vuoi_tu" while [ -d "$path" ] ; do path="$path$suffix" done return $path }
- 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
- cristian_c
- Accecante Asceta

- Messaggi: 23422
- Iscrizione: lunedì 29 ottobre 2007, 11:31
Re: Script complesso per rinominare grandi quantità di file
http://www.pluto.it/files/ildp/guide/ab ... MPLEXFUNCTcrap0101 » [url=http://forum.ubuntu-it.org/viewtopic.php?p=4266760#p4266760]oggi, 14:58[/url] ha scritto:in bash l'unica cosa che si "returna" è lo stato d'uscita.cristian_c ha scritto:Codice: Seleziona tutto
check() { path=$1 suffix="quello_che_vuoi_tu" while [ -d "$path" ] ; do path="$path$suffix" done return $path }
- crap0101
- 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
e quindi?cristian_c ha scritto:http://www.pluto.it/files/ildp/guide/ab ... MPLEXFUNCTcrap0101 » [url=http://forum.ubuntu-it.org/viewtopic.php?p=4266760#p4266760]oggi, 14:58[/url] ha scritto:in bash l'unica cosa che si "returna" è lo stato d'uscita.cristian_c ha scritto:Codice: Seleziona tutto
check() { path=$1 suffix="quello_che_vuoi_tu" while [ -d "$path" ] ; do path="$path$suffix" done return $path }
ripeto... cercando di essere *cristallino*: in BASH una funzione può ritornare solo lo stato d'uscita, che è un numero compreso tra 0 e 255, NON una stringa, un path, un array, un socket o che altro.
Tra l'altro il link che hai postato dice esattamente questo, forse non ho capito che intedi.
- 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
- cristian_c
- Accecante Asceta

- Messaggi: 23422
- Iscrizione: lunedì 29 ottobre 2007, 11:31
Re: Script complesso per rinominare grandi quantità di file
Ho appurato che effettivamente le funzioni in bash consentono di restituire soltanto numeri interi, ma forse c'è un modo per aggirare il problema: http://stackoverflow.com/questions/3236 ... h-functione quindi?
ripeto... cercando di essere *cristallino*: in BASH una funzione può ritornare solo lo stato d'uscita, che è un numero compreso tra 0 e 255, NON una stringa, un path, un array, un socket o che altro.
Tra l'altro il link che hai postato dice esattamente questo, forse non ho capito che intedi.
- crap0101
- 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
- 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
crap001 e cristian_c, grazie, ma sono due mesi che sto rileggendo i vostri ultmi commenti e facendo prove su prove su prove----non ho capito niente ne' di bash ne' di stack overflow :-0
qualcuno sa come risolvere questo problema?!?
- UbuNuovo
- 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
prova a inserire questo blocco
Codice: Seleziona tutto
suff='D_'
elenco_file="$(ls ${path}/)" # ho usato ls per chiarire
for f in $elenco_file;do
if [[ "$nwfile" == "$f" ]]
then
nwfile=${suff}$nwfile
break
fi
doneCodice: Seleziona tutto
mv -v "$file" "${path}/${nwfile}" 2>/dev/nullPoi vedrai che gli altri ottimizzeranno il codice.
- cristian_c
- Accecante Asceta

- Messaggi: 23422
- Iscrizione: lunedì 29 ottobre 2007, 11:31
Re: Script complesso per rinominare grandi quantità di file
- UbuNuovo
- 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
Ho messo nella funzione il codice di controllo ma non funziona bene nel primo ciclo for di eliminazione, ... come fare?
Trovato! Levo il break!
creo la struttura di prova
Codice: Seleziona tutto
#mkdir "img"
#touch "img/abc 123.jpeg" "img/abc_123.jpg" "img/abc_123@.jpg" "img/abc-123@.jpg"
Codice: Seleziona tutto
#!/bin/bash
# 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=${suff}$nwfile
#break
fi
done
}
move() {
while read file ; do
nwfile=${file##*/}
path=${file%/*}
for i in ${elimina[@]}; do
nwfile="${nwfile//$i/}"
controlla_esistenza #questo non fungeva bene
done
# Inserisci qua le tue sostituzioni:
nwfile="${nwfile// /_}"
controlla_esistenza
nwfile="${nwfile//-/_}"
controlla_esistenza
nwfile="${nwfile//.jpeg/.jpg}"
controlla_esistenza
mv -v "$file" "${path}/${nwfile}"
done
}
find $1 -type d -print | move
find $1 -type f -print | move
- UbuNuovo
- 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
Ho messo anche la conversione dei file in minuscolo non sopporto il maiuscolo soprattutto vedere '.JPG'.
Il codice funziona, ma se metto 'echo' davanti a 'mv' non mi dice il vero. bo?
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
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"
Aggiungendo l'echo:
Codice: Seleziona tutto
...
echo mv -v "$file" "${path}/${nwfile}" 2>/dev/null
...Codice: Seleziona tutto
mv -v img img/img
mv -v img/abc_123@.jpg img/abc_123.jpg.D
mv -v img/abc 123.jpeg img/abc_123.jpg.D
mv -v img/abc-123@.jpg img/abc_123.jpg.D
mv -v img/abc-123@.JPG img/abc_123.jpg.D
mv -v img/abc_123.jpg img/abc_123.jpg.D
- UbuNuovo
- 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
Codice: Seleziona tutto
...
echo mv -v "$file" "${path}/${nwfile}" 2>/dev/null
...
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 7 ospiti