Newsgroup: it.comp.os.linux.sys
Titolo: Script per rinominare file

Vorrei creare uno script bash che mi permetta di rinominare una
discreta quantità di file (tutti con la stessa estensione).
In particolare vorrei sostituire gli spazi con _ e la lettera ì con i.
Avevo pensato a qualcosa del genere, ma non so bene come utilizzare
"sed".
Qualcuno mi può dare una mano?
ls *.txt | while read FILE
do
 mv "$FILE" `echo "$FILE"|sed -e 's/ /_' ??????????
done
-- 
Ciao, Lurkos


rename " " "_" *.txt
rename "ì" "i" *.txt
eventualmente ripetuti più volte se ci sono più occorrenze dei caratteri 
  da sostituire in un solo file

  mv "$FILE" `echo "$FILE"|sed -e 's/ /_' ??????????
Ci sei quasi. Io userei uno script del genere:
#!/bin/bash
for i in *
  do
   NUOVO=`echo "$i" | sed s/ě/i/g`      #qui togliamo le "ě"
   NUOVO=`echo "$NUOVO" | sed s/\ /_/g` #e qui gli spazi. Nota il '\ '.
#č bene toccare solo i file che hanno degli spazi o delle "ě":
   if [ "$i" != $NUOVO ]
    then mv "$i" $NUOVO
    echo "Ho rinominato \"$i\" in $NUOVO"
   fi
  done
exit 0
Saluti,
Scionforbai

> #è bene toccare solo i file che hanno degli spazi o delle "ì":
Che poi, ragionando, forse dovresti controllare anche che $NUOVO non 
esista già, per evitare di sovrascrivere qualcosa. Del tipo:
#!/bin/bash
for i in *
  do
   NUOVO=`echo "$i" | sed s/ì/i/g`          #qui togliamo le "ì"
   NUOVO=`echo "$NUOVO" | sed s/\ /_/g`     #e qui gli spazi
   if [ "$i" != $NUOVO ]
    then
     if [ -e $NUOVO ]
      then
       echo "\"$i\": $NUOVO esiste già, codardamente non sovrascrivo."
      else
       mv "$i" $NUOVO
       echo "Ho rinominato \"$i\" in $NUOVO."
     fi
   fi
  done
echo Bye!
exit 0
Poi alle raffinatezze (inserire automaticamente un suffisso progressivo 
prima dell'estensione .txt) ci pensi tu...
Salut
Scionforbai

 rename "ì" "i" *.txt
Ok, grazie.
Mi ero scordato di dire che nei nomi ci sono delle parantesi "(" che
")" che vorrei eliminare.
Seguendo il tuo metodo dovrei usare in aggiunta questo?
rename "(" "" *.txt
rename ")" "" *.txt
-- 
Ciao, Lurkos

 prima dell'estensione .txt) ci pensi tu...
Ti ringrazio.
Solo ora mi sono accorto che nei nomi dei file ci sono anche delle
parantesi ( "(" e ")" ) che vorrei eliminare.
Es. parte (1) giovedì.txt --> parte_1_giovedi.txt
Il mio amico che ha dato quei nomi non pensava che io poi ci volessi
lavorare sopra  con uno script abbastanza complesso .... :-/
-- 
Ciao, Lurkos

 
penso di sě, ricordati comunque che rename sostituisce solo la prima 
occorrenza di un carattere, quindi se ce ne sono piů di uno (da 
sostituire) devi ripetere piů volte il comando.
Ciao,
-- 
Sandro.

 rename "ě" "i" *.txt
cosa intendi per rename? se lo chiedo a debian, ottengo
,----
| Tue Dec 06, 11:56:36 boffi@sanmartino: ~ $ man rename | head
| RENAME(1)              Perl Programmers Reference Guide
| 
| 
| 
| NAME
|        rename - renames multiple files
| 
| SYNOPSIS
|        rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
`----
-- 
termy prende per fatica, attento.                     -- PLS, in IFQ

 parantesi ( "(" e ")" ).
Aggiungi la riga:
NUOVO=`echo "$NUOVO" | sed s/[\(\)]//g   #qui rimuove le parentesi
La mia è una soluzione, ma sicuramente tutto ciò si può fare in tanti 
altri modi, e di sicuro più eleganti, e che ti mettono al riparo dai 
problemi più disparati... anzi, se li trovi fammi un fischio!
Salut,
Scionforbai

 | RENAME(1)              Perl Programmers Reference Guide
sandro@bell:~> cat /etc/SuSE-release
SuSE Linux 9.2 (i586)
VERSION = 9.2
sandro@bell:~> man rename | head -15
Sto riformattando rename(1), attendere prego...
RENAME(1)                  Linux Programmer's Manual 
RENAME(1)
NAME
        rename - Rename files
SYNOPSIS
        rename from to file...
DESCRIPTION
        rename  will  rename  the specified files by replacing the first 
occur-
        rence of from in their name by to.

 done
Personalmente preferirei usare tr
ls -1 *.txt | while read f ; do
  mv "$f" $(echo "$f" | tr '() אטלעש' '________')
done
-- 
Flavio Visentin
Membro del CICAP
Comitato Italiano per il Controllo delle Affermazioni di P4


Effettivamente Debian installa il rename di Larry Wall.
Rename non e' un comando standard della shell.
-- 
echo 15225453802040233345540387594P | dc

 exit 0
Beh puoi usare un mv -bv (-b crea la famosa copia di backup col tilde) e il -v 
ti risparmia la echo "ho fatto questo e quello..."
-- 
Faciait li signeur!
Roy Batty
http://www.allservice.it/

 gli stessi). 
Ok, grazie.
-- 
Ciao, Lurkos