[PLUTO-help] ciclo su file....

krik a interfree.it krik a interfree.it
Sab 19 Gen 2008 23:07:57 CET


On Saturday 19 January 2008 18:15, Alfredo Alessandrini wrote:
> 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

Ciao,
  non sei stato proprio chiarissimo circa quello che vuoi fare. Comunque, 
tirando ad indovinare su quello che ti serve veramente, io farei come segue:

$ cd raster
$ find ./ -type f
./V1k19400402Europe/001.hdf
./V1k19400403Europe/001.hdf
./V1k19400401Europe/001.hdf
ecc.
# tanto per essere sicuri di aver capito come e' fatta la struttura 
# di directory e file che vuoi modificare; quindi:
$ for i in $(find ./ -type f); do j=${i#\.\/V1k}; k=${j%%Europe*}; \
echo $i ${i%001.hdf}$k.hdf; done
# il precedente fa le seguenti cose:
# for i in $(find ./ -type f)
# trova tutti i file normali nella directory corrente e cicla su tutti 
# facendo quello che c'e' scritto tra do e done
# j=${i#\.\/V1k}
# mette nella variabile j il valore della variabile i senza la parte iniziale
# corrispondente a ./V1k
# k=${j%%Europe*} 
# mette nella variabile k il valore della variabile j senza la parte terminale
# Europe.... ovvero nella variabile k ora hai le 8 cifre rappresentanti una 
# data
# ${i%001.hdf}$k.hdf
# ha come esito il percorso del file di origine tolta la parte finale 001.hdf
# e sostituita con il valore che hai memorizzato nella variabile k seguito 
# da .hdf
# se lanci il comando precedente (che non fa nulla di pericoloso 
# cosi' come e') a video dovrebbe risultarti un output come segue
./V1k19400402Europe/001.hdf ./V1k19400402Europe/19400402.hdf
./V1k19400403Europe/001.hdf ./V1k19400403Europe/19400403.hdf
./V1k19400401Europe/001.hdf ./V1k19400401Europe/19400401.hdf
ecc...
# se quello che vuoi fare e' rinominare i file elencati nella parte sx di 
# ogni riga con i nomi che compaiono a destra  
# allora nel comando precedente sostituisci mv ad echo.

Attenzione pero' che le modifiche ripetitive sui file utilizzando i cicli for 
sono MOLTO pericolose. Rischi seriamente di perdere dati! Non perche' il 
sistema sbaglia ma perche' TU dai dei cattivi comandi. Ad esempio cosa 
succede se all'interno della tua struttura di file ce ne e' uno che non ha i 
requisiti che hai specificato tu? Magari nulla, magari perdi dei dati, magari 
fai un vero casino....  Quindi prima di lanciare il comando con mv al posto 
di echo FAI UN BACKUP!!! O meglio ancora copiati tutta la struttura con i 
file in una directory dove ti puoi permettere il lusso di fare casino e anche 
cancellare tutto e fai delle prove. Insomma, io ti ho avvisato, se ti fai 
male non lamentarti.

Ciao.











More information about the pluto-help mailing list