On 7/28/05, Nando Santagata <nando@xxxxxxxxx> wrote:
> man touch
> man ls (per una spiegazione delle varie date)
A suo tempo usai sti due script qui trovati qua e la e modificati.
Sara' da aggiustare e migghiorare anche perche' allora non ne sapevo
una mazza di scripting. Ergo se hai migliorie condividi ;)
cambiaora.sh
-------------------------------- inizio cambiaora.sh ---------
#!/bin/bash
# Script che corregge la data dei files contenuti in una cartella
traslandola del quantitativo voluto
# NB: richiede contemporaneamente nella stessa cartella da cui ?
lanciato lo script perl timestamp.pl
#---VARIABILI DA IMPOSTARE----
# cartella dove risiedono i file
FOLDERADD='/home/eagleone/prova/'
# Fuso orario in secondi (Provare con l'opzione --test se va bene. Se
lanciato lo script con --test la data ? invariata, allora il fuso ?
correttamente inserito)
FUSO=7200
#Traslazione: ? la correzione sulla data che si vuole effettuare (la
data viene sottratta
TRANS=3300
# Facoltativo:prefisso dei file (visto che sono immagini saranno tutte simili...
IMAGESPRE='dsc'
# estensione dei file
IMAGESPOST='jpg'
# Elenco dei file
LISTAFILE=`stat -c %n $FOLDERADD$IMAGESPRE*.$IMAGESPOST`
#echo Primo stato $STATO
# Ciclo che cambiare la data dei file nella LISTAFILE
for NOMEFILE in $LISTAFILE; do
#Prendo il timestamp della data
DATA=`stat -c %Y $NOMEFILE`
# Calcolo la data con la correzione di TRANS
let NEWDATA=$DATA-$TRANS+$FUSO
# Se chiamata con l'opzione --test non deve modificare la
data: serve per verificare il valore corretto di FUSO. Lo si potrebbe
automatizzare...
if [[ $1 == "--test" ]] ; then let NEWDATA=$DATA+$FUSO ; fi
# Chiama lo script perl timestamp.pl che converte la data dal
timestamp al formato voluto da touch -t
CONVERTI=`/usr/bin/perl timestamp.pl $NEWDATA`
# Cambio la data del file
touch -t $CONVERTI $NOMEFILE
done
--------------- fine cambiaora.sh -------------
--------------- inizio timestamp.pl ------------
#!/usr/bin/perl
# Inculdo la libreria necessaria
use Date::Calc qw(:all);
# Vuole che venga passato il timestamp
# Restituisce l'ora nel formato corretto voluto da touch.
#
#Salvo in una nuova variabile per comodit?
$timestamp=$ARGV[0];
#Funzione che converte la data in stringa
($year,$month,$day, $hour,$min,$sec) = Time_to_Date($timestamp);
# Aggiungo gli zeri se necessario...
if ($month<10)
{
$month="0"."$month";
}
if ($day<10)
{
$day="0"."$day";
}
if ($hour<10)
{
$hour="0"."$hour";
}
if ($min<10)
{
$min="0"."$min";
}
if ($sec<10)
{
$sec="0"."$sec";
}
# Restituisco la data per touch
print "$year$month$day$hour$min.$sec";
---------- fine timestamp.pl ------------
|