Newsgroup: it.comp.os.linux.iniziare
Titolo: Rendere maiuscola la prima lettera di un file & more..

Dopo aver chiesto aiuto su come underscorare (ops.. lowcaseare!)
i nomi di molti file, torno a chiedere come posso fare per
rendere, da console, maiuscola la prima lettera del nome
del file.. e, ulteriore finezza, rendere maiuscola ogni lettera
che segue al segno _
(es.
topolino's_band-la_canzone di topolino.ogg
dovrebbe diventare
Topolino's_Band-La_Canzone_Di_Topolino.ogg)
Scusate l'esempio delirante..
-- 
"We believe that Linux is, in material part,
an unauthorized derivative of UNIX."
www.sco.com

 Scusate l'esempio delirante..
mi verrebbe in mente un po' di codice C++, ma sicuramente si puň fare di
meglio e piů velocemente con la programmazione BASH, o con
perl/python/ecc...
----8<----CUT HERE----8<-----
#include <iostream>
#include <string>
#include <cctype>       //forse questo non serve
#include <cstdlib>
using namespace std;
int main(int argc, char* argv[]) {
        string nomefile(argv[1]);
        string vecchio_nomefile(nomefile);
        nomefile[0] = toupper(nomefile[0]);
        for(string::iterator iter = nomefile.begin() + 1; iter != nomefile.end(); ++iter) {
                if(*iter == '_' && iter != nomefile.end() - 1) {
                        ++iter;
                        *iter = toupper(*iter);
                }
        }
        rename(vecchio_nomefile.c_str(), nomefile.c_str());
        return 0;
}
----8<----CUT HERE----8<-----
l'ho scritto di getto, ho fatto un solo test e funziona, ma non c'č
controllo dei parametri. se ti serve, lo aggiungo!
se non hai mai compilato un file di codice c++, fai cosě:
copia il codice in un nuovo file, con estensione .cpp
poi:
$ g++ file.cpp -o nome_eseguibile_che_vuoi
e poi esegui con
$ ./nome_eseguibile_che_vuoi
HTH			
-- 
Andrea Spadaccini a.k.a. Lupino
         - Catania -
Linux Registered User #313388 - Mandrake Linux 9.1

 controllo dei parametri. se ti serve, lo aggiungo!
Grazie, l'ho provato sul singolo file e funziona perfettamente!
Non sono riuscito pero' ad automatizzare il procedimento su molti file
e magari con estensioni varie, ho provato con ./a.out * ma niente..
any suggestions? :-) 


 for i in * ; do mv $i 'echo $i | sed 's/^./\U&/' | sed 's/_./\U&/g'' ; done
L'ho provato, ma ricevo un messaggio di errore :-\
[1] 2491
[2] 2492
mv: impossibile spostare `01_welcome_to_the_jungle.ogg' in `echo $i | sed
s/^./U':
No such file or directory
bash: / | sed s/_./U: No such file or directory
bash: /g: No such file or directory


 bash: /g: No such file or directory
qualcosa di sbagliato nella sintassi, bash interpreta & e manda in
background il comando incompleto. spero che non avrai copiato/incollato
direttamente dal mio post scritto con OE :)
ho ricontrollato la riga che ti ho scritto e secondo me è corretta.
fai solo attenzione che il primo e l'ultimo apice devono essere rovesciati,
mentre quelli che racchiudono i comandi sed devono essere normali.
saluti

 mentre quelli che racchiudono i comandi sed devono essere normali.
Sara' il caldo o sono io che sono tonto.. ho riprovato ma niente..
attendo il tuo post risolutore da client non-OE.


 Sara' il caldo o sono io che sono tonto.. ho riprovato ma niente..
allora mi sono loggato sul firewall e ho fatto una prova. il comando
funziona ma c'č un ma.
bash non da nessun errore, segno che gli apici sono al posto giusto, perň
non mi converte in uppercase l'espressione indicata, come se sed non
riconoscesse il comando speciale \U. infatti aggiunge una U, cosě al posto
di _a invece di _A ottieni U_a. idem per il carattere di inizio riga.
deve essere una questione relativa alla versione di sed, sul firewall c'č
debian woody mentre a casa uso debian sid, lě sono sicuro che funzioni
perchč l'ho fatto altre volte e le informazioni su \U \L \u \l le ho trovate
direttamente con 'info sed'. quindi piů tardi da casa mando un esempio
funzionante con relativa versione di sed.
saluti

 
Metti tutti i file in una directory, quindi ti sposti dentro e provi con
$ for file in *; do tuo_comando $file; done
-- 
ciao            |visita
                 |
http://www.sifor.it
gelty           |
http://www.sifor.com
-------------------------------------
E' esplicitamente vietato usare l'indirizzo e-mail di questo messaggio
per fini diversi dalla risposta al messaggio stesso (Art. 10 DL. 171/98).

 | sed 's/^./\U&/' | sed 's/_./\U&/g' ` ; done
angelo ~/a $ ls
01_File_Di_Esempio.mp3  
02_Altro_File_Di_Esempio.mp3
Terzo_File_Di_Esempio.mp3
angelo ~/a $ sed -V
GNU sed versione 4.0.7
Copyright (C) 2003 Free Software Foundation, Inc.
saluti

 any suggestions? :-)
ecco un semplice script:
#!/bin/bash
for FILE in *;
do
	./a.out $FILE
done
mi secco ad aggiungere il codice per supportare gli elenchi di file! :P


 $ for file in *; do tuo_comando $file; done
Grazie!


 [...]
Grazie!
