trovare stringhe uguali

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
fortea
Linux 0.x
Linux 0.x
Messaggi: 24
Iscritto il: gio 15 lug 2010, 14:00
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: fluxbox

trovare stringhe uguali

Messaggio da fortea »

buongiorno a tutti!
ho bisogno di rinominare i file presenti in una directory (e nelle sottodirectory) in modo tale che non ci siano file con lo stesso nome.
La mia idea, finora, è di creare un elenco di file con

Codice: Seleziona tutto

find . -name *
e mettere prima basename, in modo tale da ottenere solo i nomi dei file. Ma poi come posso ottenere le coppie di stringhe identiche e risalire all'intero indirizzo del file per modificarne il nome (ad esempio aggiunendo automaticamente un indice numerico)?

grazie mille!

Avatar utente
masalapianta
Iper Master
Iper Master
Messaggi: 2775
Iscritto il: lun 25 lug 2005, 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:

Re: trovare stringhe uguali

Messaggio da masalapianta »

così al volo mi viene in mente questo:
for i in `find . -type f -exec basename {} \; |sort|uniq -d`; do for j in `find . -name "$i"`; do mv $j $j-`stat $j |grep Inode|awk '{print $4}'`;done ;done
sicuramente ci son soluzioni più efficienti (rispetto ad un doppio for), ma ho sonno e mi si sta rinfacciando la lasagna mangiata a pranzo

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: trovare stringhe uguali

Messaggio da Mario Vanoni »

fortea ha scritto:buongiorno a tutti!
ho bisogno di rinominare i file presenti in una directory (e nelle sottodirectory) in modo tale che non ci siano file con lo stesso nome.
La mia idea, finora, è di creare un elenco di file con

Codice: Seleziona tutto

find . -name *
e mettere prima basename, in modo tale da ottenere solo i nomi dei file. Ma poi come posso ottenere le coppie di stringhe identiche e risalire all'intero indirizzo del file per modificarne il nome (ad esempio aggiunendo automaticamente un indice numerico)?
Non posso esistere in una dir due files con nome metti "annabella",
neppure un file ed una subdir con lo stesso nome!

Quindi cerchi "annabella" nella prossima subdir,
e nelle altre X subdir/subdir/... successive,
e ne vorresti cambiare il nome.

Ho capito il tuo problema?

Con find(1) trovi tutte le "annabella",
ma come rinominarle, al livello sub2, sub3, sub4 ecc.?
Soprattutto con quale criterio?

Rispondi