Newsgroup: it.comp.os.linux.software
Titolo: script x rinominare i file!! non va help

Ho trovato su internet questo script 
#!/bin/bash                                                                                 
for BAK in "$(find . -name "*.bak" -exec  ls -1
{}\;)"                                                   
do     
   NOBACK=$(echo $BAK |
sed"s/\.bak//")                                                       mv
"${BAK}" "${NOBACK}"
2>/dev/null                                                         if
[$? -eq
0]                                                                             
then                                                                                    
    echo "$BAK rinominato correttamente in
$NOBAK"                                      
 
else                                                                                    
   echo "ERRORE: $BAK non rinominato!  in $NOBAK 
"                                   
    exit
666                                                                                
 
fi                                                                                      
done                                                                                        
che purtroppo non va il risultato è:
[root@hole pippo]# ./bak2met 
ERRORE: ./.overnet/temp/programma 1/1.part.met.bak              
./.overnet/temp/programma 2/1.part.met.bak              
./.overnet/temp/programma 3/1.part.met.bak              
./.overnet/temp/programma 4/1.part.met.bak non rinominato! 
in                              [root@hole pippo]# 
Potreste aiutarmi non sono pratico di script
Enrico



riscrivilo così:
#!/bin/bash                                                                                 
for BAK in $(find . -name "*.bak" -exec ls -1 {}\;)                                                   
do     
   NOBAK=$(echo $BAK | sed "s/\.bak//")
   mv "${BAK}" "${NOBAK}" 2>/dev/null


 done
Ho fatto come hai detto ma 
mi dice
Mi dice che manca l'argmento del -exec
Non capisco come mai
Enrico

 Mi dice che manca l'argmento del -exec
prova con lo spazio
-- 
§                ZeD                §
§          Up da 12 minuti          §
§            02/06/2004             §
§ Ss. Marcellino e Pietro-S. Erasmo §

 prova con lo spazio
Infatti era cosi' Grazie
Adesso ho un'altro problema
che è quello dello spazio nelle directory mi spiego
risultato del solo find:
./.overnet/temp/XXX Pincopallo (xxx).mpg/1.part.met.bak
risultato dello script: 
[root@hole pippo]# ./bak2met    
ERRORE: ./.overnet/temp/XXX non rinominato!  in ./.overnet/temp/XXX
[root@hole pippo]#
come mai
thanks
Enrico

 Enrico
ha ragione lui, colpa mia.
alla terza riga, quella che inizia con for, dopo la doppia parentesi
graffa aggiungi uno spazio
for BAK in $(find . -name "*.bak" -exec ls -1 {} \;)
e aggiungi spazi dopo e prima delle parentesi quadre anche alla riga 7
if [ $? -eq 0 ]
ora dovrebbe funzionare (a me funziona)
ciao

 che è quello dello spazio nelle directory mi spiego
"{}"
-- 
§                  ZeD                  §
§            Up da 55 minuti            §
§              03/06/2004               §
§ S. Carlo Lwanga-S. Clotilde-S. Olivia §

 Enrico
allora prova questo
#!/bin/bash
IFS='
'
for BAK in $(find . -name "*.bak" -exec ls -1 {} \;)
do
   v_file=$(basename "$BAK")
   n_file=$(basename "$BAK" .bak)
   cartella=$(dirname "$BAK")
   mv "$cartella/$v_file" "$cartella/$n_file" 2>/dev/null
   if [ $? -eq 0 ]
   then
      echo "$BAK rinominato correttamente in "$cartella/$n_file""
   else
      echo "ERRORE: $BAK non rinominato!"
      exit 666
   fi
done

 Enrico
allora prova questo
#!/bin/bash
IFS='
'
for BAK in $(find . -name "*.bak" -exec ls -1 {} \;)
do
   v_file=$(basename "$BAK")
   n_file=$(basename "$BAK" .bak)
   cartella=$(dirname "$BAK")
   mv "$cartella/$v_file" "$cartella/$n_file" 2>/dev/null
   if [ $? -eq 0 ]
   then
      echo "$BAK rinominato correttamente in "$cartella/$n_file""
   else
      echo "ERRORE: $BAK non rinominato!"
      exit 666
   fi
done

 '
Grazie di nuovo
Enrico



sarebbe meglio che postassi almeno l'output dello script, altrimenti capire
perchè a te non funziona diventa difficile.
la prima istruzione serve a dire alla shell di usare come separatore una
nuova riga, e non anche spazi e tabulazioni come fa di default

 che è quello dello spazio nelle directory mi spiego
find | grep \\.bak$ | while read file; do
       mv "$file" "`dirname \"$file\"`/`basename \"$file\" .bak`" \
       && echo "$file" yes 
       || echo "$file" no
done
perché vuoi copiare il backup su i file originali senza verificare se
esiste l'originale?
-- 
ATOMIC BOMB. TORPEDOED. SINKING. U-147.

 esiste l'originale?
ah! scordavo: se hai migliaia di files da rinominare e usi bash come
shell (e forse qualcun'altra)
         mv "$file" "${file//%.bak/}"
al posto della prima versione del comando mv fa partire un bel po'
meno di processi (il % prima del pattern .bak? "If pattern begins with
%, it must match at the end of the expanded value of parameter.")
-- 
ANNOYED BY SPACE-TIME VORTEX 122W 41N. SINKING. U-681.

Grazie a tutti son riuscito a farlo andare....
cavolo e' fondamnetalissima la riga 
IFS='
'
Grazie a tutti ....
adesso lo sto un po' ottimizzando
ma l'imporatante è che funzioni
Ciao a tutti