Visualizzazione post con etichetta tcsh. Mostra tutti i post
Visualizzazione post con etichetta tcsh. Mostra tutti i post

lunedì 12 novembre 2012

Rinomina sequenze di immagini

Se abbiamo delle sequenze di immagini con singoli file con nome
Image1_altro.ppm

Image10_altro.ppm
Image123_altro.ppm
In pratica con un prefisso, un numero non formattato e un suffisso,


e vogliamo rinominarle come
Image_altro0001.ppm
con solo un prefisso e un numero con un ben definito numero di cifre possiamo fare:


1. togliamo il suffisso
rename 's/_altro//' *
2. togliamo il prefisso
rename 's/Image//' *
3. a questo punto abbiamo le immagini solo con i numeri in questo modo:
1.ppm 10.ppm 123.ppm
possiamo con foreach di tcsh rinominarle formattando anche il numero di cifre:
foreach i ( *.ppm )
foreach? cp $i `printf "Image_altro%04d"$i`
foreach? end

Passo passo:

per ogni file di tipo ppm presente nella cartella

foreach i ( *.ppm )

copio il file con nome $i (es. 1.ppm) in un file che ha nome Image_altro0001.ppm
con il comando tra apici `printf` che viene eseguito prima di cp
con il nome dell'immagine trasformata con il prefisso Image_altro che era il prefisso desiderato
foreach? cp $i `printf "Image_altro%04d"$i`

Per concludere il foreach mettiamo end
foreach? end

Convertire sequenze di immagini

Per convertire una sequenza di immagini da ppm a jpeg,
usando convert di imagemagick

#!/bin/tcsh foreach i (*ppm)
convert $i $i:r.jpg
end


Per cambiare il nome si può utilizzare krename, se ad esempio capita che le immagini hanno nome Img000_pippo.png possiamo con krename cambiarle in Img_pippo000.png.

tcsh foreach

Per usare il foreach di tcsh, esempio per copiare file di un certo tipo in una sottocartella


foreach file ( *.tif )
foreach? cp $file res/$file:r
foreach? echo -n $file 
foreach? end

Ora commento pezzo per pezzo:

La sintassi del comando foreach è la seguente:
foreach var ( statement )
Nel caso dell'esempio ho una variabile file, che contiene tutti i file .tif uno per uno all'interno della directory
foreach file ( *.tif )

Questo è quanto appare nella shell una volta dato il comando foreach correttamente
foreach?

Copio cp, il contenuto della variabile $file dentro alla cartella res, con :r tolgo l'estensione
foreach? cp $file res/$file:r

Filename modifiers
$file:h Remove a trailing pathname component, leaving the head.
$file:t Remove all leading pathname components, leaving the tail.
$file:e Remove all but the extension.
$file:r Remove a filename extension `.xxx', leaving the root name.
$file:u Uppercase the first lowercase letter.
$file:l Lowercase the first uppercase letter.
$file:s/l/r/ Substitute l for r. l is simply a string like r, not a regular expression.


Per la stampa di quello che ho copiato, modalità verbose in proprio:
foreach? echo -n $file 
con -n si toglie l'acapo automatico dall'echo

Per completare il foreach
foreach? end

References