Newsgroup: it.comp.os.linux.iniziare
Titolo: mv, sed e nomi file

Salve,
uso sed in uno script per rinominare mp3.
tra l'altro, ho file di tipo
1-win.mp3
2-mi.mp3
3-fa.mp3
4-schifo.mp3
ci ho messo una giornata a capire che se rimuovo solo il numero
d'ordine nei file di sopra, mv riporta un errore perche' il nome file
allora comincia con -. Se cerco di rinominare 1win.mp3, funge.
ma come mai?? pensa che sia il parametro di un comando o robe cosi'??
REMOVE=$1
for i in * ; do
	z=`echo "$i" | sed "s/$REMOVE//g"`
	if [ "$z" != "$i" ]; then
		mv "$i" "$z"
	fi
done
grazie, mirko

 done
Usando la bash potresti anche fare:
REMOVE=$1
for i in *${REMOVE}* 
  do  
    mv -- "$i" "${i/${REMOVE}/}"
  done
* I due trattini "--" non vengono riconosciuti 
  da tutti i programmi.
* Ci sono grossi problemi se la variabile $REMOVE
  contiene barre o virgolette.
* la sostituzione dei parametri della bash non 
  funziona con altre shell.
* Ho sonno.


pero' cosi' rimuove la stringa REMOVE in qualunque parte del file name
si trovi, giusto? beh, anche col mio script sed fa lo stesso, seppur
tolgliendo il 'g' finale sostituisce solo la prima occorrenza.
mi sapresti dare una dritta su dove guardare per scrivere uno script
che accetti parametri (alla stregua di ls -l, rm -f, ...)?
Io immagino di vedere il contenuto di una cartella di mp3:
1-Via Paolo Fabbri 43.mp3
...
e decido che mi serve lanciare lo script come
./remove_from_file_name -m -d -e -s [
dove i parametri sono
-n normalizza, togli spazi e metti underscore
-d rimuovi tutti i numeri (inizio e ovunque nel nome)
-e rimuovi un numero solo se all'inizio nome
-s rimuovi stringa che segue, in questo caso la parentesi quadra
insomma per avere flessibilita' sullo script in base ai nomi file che
voglio cambiare. Le operazioni singole le so fare, il problema e'
passare i parametri.
Mi viene in mente una cosa macchinosa, nella fattispecie:
1. controlla parametro passato i-esimo $i
2. comincia per -? significa che e' un parametro (se no, esci o altro)
3. richiede uno specificatore (o come si chiama?) del tipo di -s, che
da solo non farebbe niente, vuole qualcosa dopo
4. se si, prendi $(i+1) e appiccicalo a $1; se no, vai nella struttura
case dello script e fai quel che si deve
5. passa al parametro $(i+1) o $(i+2), a seconda di cos'era $1
c'e' un metodo piu' spiccio?
insomma, come "copio" il funzionamento di ls -l?
grazie per la pazienza, ciao

 accetti parametri...
man bash 
man getopts

> man getopts
fantastico, proprio quello che mi ci voleva.
un piccolo problema, sembra non abbia implementato getopts ma solo il
desueto (da come leggo sul web) getopt.
man getopts non riporta niente, mentre man getopt si.
uso mepis 6.5 e apt-cache search getopt mi ritorna
libpopt-dev - lib for parsing cmdline parameters - development files
libpopt0 - lib for parsing cmdline parameters
gengetopt - skeleton main.c generator
cl-getopt - Common Lisp utility for command-line processing
libargtable2-0 - A library for parsing GNU style command line
arguments
libargtable2-dev - A library for parsing GNU style command line
arguments
libcppopt-dev - C++ option parsing library header files
libcppopt0c2a - C++ option parsing library
libgetopt-argvfile-perl - Perl module for reading script options and
parameters from files
libgetopt-declare-perl - Getopt::Declare command line argument parser
libgetopt-java - GNU getopt - Java port
libgetopt-mixed-perl - Perl module for processing options in GNU-style
(= long and short)
libgetopt-ocaml-dev - command line parsing library for OCaml
libshhopt1 - Command line option parser - runtime
libshhopt1-dev - Command line option parser - development
opt - Options Parsing Tool library
wyg - (Where's Your Grammar?) command line parser generator
come ottengo getopts?

 getopt mi ritorna...
Scusa, ma se hai gia` installato getopt...