Newsgroup: it.comp.os.linux.sys
Titolo: ciclo su file....

ciao,
sto cercando di creare un ciclo su dei file (circa 600..impossibile da
fare a mano...), ma data la mia scarsa conoscenza del bash, mi trovo
in alto mare... :-)
in pratica dovrei fare questo:
nella cartella /home/utente/raster/
ho 600 cartelle nominate in questo modo: V1k19400401Europe
le cartelle si differenziano soltanto per le 8 cifre intermedie
(V1k********Europe), che rappresentano una data.
io dovrei entrare in ogni cartella, dare un comando specifico che ha
come input due valori:
- il percorso dell'immagine che dovrà essere  /home/utente/raster/
V1k********Europe/001.hdf
- il nome da dare al nuovo file che dovrà essere uguale al valore
numerico presente nel nome della cartella
quindi dovrei spostare la cartella appena elaborata e ripetere il
tutto con la cartella successiva fino a alla fine.
considerate che dovrei fare il tutto in ciclo e che il nome del file
d'origine è sempre lo stesso (001.hdf)
E' difficile da fare??
almeno datemi un spunto da dove poter iniziare :-)
ciao,
Alfredo

man for
http://www.mrwebmaster.it/linux/guida_shell_scripting/
auguri
Alfredo wrote:

 almeno datemi un spunto da dove poter iniziare :-)
E' scritto cosi' senza testarlo quindi prendilo come uno spunto, ma e'
Domenica mattina :)
for nome in 'ls /home/utente/raster/Vk1*Europe'; do
   destination=${nome:3:10}      cioe' estrai dal terzo al decimo carattere
   oppure puoi fare
      d1={nome##Vk1}  per cancellare il Vk1 iniziale
      destination={d1%%Europe}  per cancellare Europe finale
   (cd $nome; mv nome destinazione; altri comandi qui) 
      il trucco e' usare le parentesi tonde che lanciano una subshell
done
Cose consigliate da leggere:
http://www.ibm.com/developerworks/library/l-bash.html
http://devmanual.gentoo.org/tools-reference/bash/index.html
http://www.tldp.org/LDP/abs/html/
I primi due sono veramente ben fatti.
-- 
Per rispondermi, sostituisci a nomecognome il mio nome e cognome
To reply me, substitute nomecognome with my real name and surname
http://bitsandchaos.wordpress.com

 for nome in 'ls /home/utente/raster/Vk1*Europe'; do
Qui c'e' un problema con questo editor, al posto dell'apostrofo va
usato l'apostrofo rovesciato, cioe' quello che in genere si fa con
AltGr+tasto apostrofo e che ha codice ASCII 96.


 
Per evitare problemi di caratteri è meglio usare:
$(ls /home/utente/raster/Vk1*Europe)
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 $(ls /home/utente/raster/Vk1*Europe)
Grazie, e' una di quelle cose di cui non mi ricordo mai perche' in genere il
mio editor non e' cosi' fesso :)


ho risolto così:
#!/bin/bash
find $startdir -type d -name 'V1K*Europe' |
 while read xdir
   do
     cd "$xdir"
     cd 0001
     j=${xdir#\.\/V1KRNS10__}; k=${j%%__Europe*}
     i.in.spotvgt file=0001_NDV.HDF rast=$k
     r.what -f input=$k@prova east_north=11.95,42.18 >> /home/alfredo/
prova_script/dati.txt
     echo $k >> /home/alfredo/prova_script/dati.txt
     cd ..
     cd ..
     #mv $xdir /home/alfredo/prova_script/fatte
   done
non so se è la via più breve ed efficace ma funziona...
ciao,
Alfredo

 non so se è la via più breve ed efficace ma funziona...
Se funziona c'e' poco da dire, ma ti suggerirei di provare ad usare comunque
le parentesi tonde per creare una subshell, in modo che quando fai prima
cd 0001, poi non devi fare dopo cd ..
