Notizia:
  • Rilasciata Precise Pangolin 12.04. Per ottenerla, visitate questa pagina, oppure provate il tour dal vivo con un browser web moderno.
  • Nuovo forum di Ubuntu-it, l'annuncio. È consigliato aggiornare il proprio profilo e controllare la sezione Gruppo Forum per problemi noti.
  • Rilasciata la versione italiana di Precise Pangolin 12.04. Per maggiori informazioni, consultare questa discussione.
  • Il vincitore del Concorso desktop del mese di aprile è Jerico. L'elenco dei precedenti vincitori è qui.
  • È uscito il numero 17 della Newsletter italiana di Ubuntu. Lo trovate a questo indirizzo.
  • È uscito il numero 59 di Full Circle Magazine in italiano. Lo trovate a questo indirizzo.

[Risolto] Comando per sapare se un file è stato modificato

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

[Risolto] Comando per sapare se un file è stato modificato

Messaggioda fiamma » martedì 6 gennaio 2009, 20:02

Ciao

esiste un comando che permetta di sapere se un file è stato modificato?

Grazie
Ultima modifica di fiamma il giovedì 8 gennaio 2009, 17:28, modificato 1 volta in totale.
Avatar utente
fiamma
Prode Principiante
 
Messaggi: 241
Iscrizione: marzo 2008

Re: Comando per sapare se un file è stato modificato

Messaggioda KabaL_ScarS » martedì 6 gennaio 2009, 20:10

Specifica meglio che intendi per modificato.
Normalmente si usa MD5 per controllare che un file in downlodato sia identico all'originale, classico caso il download delle ISO, ma puoi replicarlo anche per i file nel tuo pc.
Oppure ci sono dei software fatti ad hoc che prima fanno un immagine di controllo e poi se cambia un file ti viene segnalato.
Notebook HP DV2172ea Ubuntu 10.04 LTS Lucid Lynx 64bit
http://h10025.www1.hp.com/ewfrf/wc/docu ... 52&lang=en
Asus EEE pc 901 Ubuntu 10.04 LTS Lucid Lynx Netbook Remix 32bit
http://eeepc.asus.com/global/product901.html?n=0
Avatar utente
KabaL_ScarS
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 648
Iscrizione: marzo 2005
Località: Torino

Re: Comando per sapare se un file è stato modificato

Messaggioda zaxxon » martedì 6 gennaio 2009, 20:11

Se hai l'originale puoi confrontarlo con un altro con il comando diff.
Avatar utente
zaxxon
Prode Principiante
 
Messaggi: 182
Iscrizione: febbraio 2008

Re: Comando per sapare se un file è stato modificato

Messaggioda fiamma » martedì 6 gennaio 2009, 20:52

Allora
1) lancio lo script con dentro il comando che controlla se un certo file è stato modificato
2) faccio quello che devo fare con un programma, quando viene modificato quel certo file il comando che ho lanciato prima mi deve avvertire della modifica. (l'avvertimento lo farò fare a libnotify)

spero di essermi spiegato bene  :)
Avatar utente
fiamma
Prode Principiante
 
Messaggi: 241
Iscrizione: marzo 2008

Re: Comando per sapare se un file è stato modificato

Messaggioda Zoff » martedì 6 gennaio 2009, 20:54

Se invece vuoi fare un controllo temporale puoi sare il comando stat
Codice: Seleziona tutto
stat nomeFile | grep -i modify

mostra la data di ultima modifica.

ciauz
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
 
Messaggi: 24437
Iscrizione: ottobre 2007
Località: Romagna!!!
Distribuzione: Ubuntu 12.04
Desktop: Unity e Gnome Shell

Re: Comando per sapare se un file è stato modificato

Messaggioda l3on » martedì 6 gennaio 2009, 21:22

Zoff ha scritto:Se invece vuoi fare un controllo temporale puoi sare il comando stat
Codice: Seleziona tutto
stat nomeFile | grep -i modify

mostra la data di ultima modifica.

ciauz


Al dire il vero il modo migliore di controllare l'ora dell'ultima modifica del file è dare il comando:

stat -c %y NOMEFILE

Le pipe costano parecchio a livello computazionale.
Ciao.
Pagina Personale sul Wiki - Sito Personale - Blog

Membro del Consiglio, Sysadmin dei portali della comunità, Amministratore del Sito e tante altre cose... Con Ubuntu-it dal maggio del 2006.
Avatar utente
l3on
Rampante Reduce
Rampante Reduce
 
Messaggi: 6419
Iscrizione: maggio 2006
Località: Bologna

Re: Comando per sapare se un file è stato modificato

Messaggioda Zoff » martedì 6 gennaio 2009, 21:41

Ecco uno script che dovrebbe fare quello che chiedi:
Codice: Seleziona tutto
#! /bin/bash
 
ultimaModifica=`stat -c %y $1`

while true
do
   update=`stat -c %y $1`
   
   if [ "$ultimaModifica" != "$update" ] ; then
      ultimaModifica=`stat -c %y $1`
      echo "E' cambiata! "$ultimaModifica
   fi
   sleep 2
done


l3on ha scritto:
Zoff ha scritto:Se invece vuoi fare un controllo temporale puoi sare il comando stat
Codice: Seleziona tutto
stat nomeFile | grep -i modify

mostra la data di ultima modifica.

ciauz


Al dire il vero il modo migliore di controllare l'ora dell'ultima modifica del file è dare il comando:

stat -c %y NOMEFILE

Le pipe costano parecchio a livello computazionale.
Ciao.

Grazie dell'info :D
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
 
Messaggi: 24437
Iscrizione: ottobre 2007
Località: Romagna!!!
Distribuzione: Ubuntu 12.04
Desktop: Unity e Gnome Shell

Re: Comando per sapare se un file è stato modificato

Messaggioda fiamma » martedì 6 gennaio 2009, 22:10

Direi ottimo
Il problema che al posto di
Codice: Seleziona tutto
echo "E' cambiata! "$ultimaModifica


metto
Codice: Seleziona tutto
notify-send --icon=$HOME/mpla/Folder.jpg --expire-time=5000 'Playing' "$DE"


e continua  ad apparire la notifica.
Avatar utente
fiamma
Prode Principiante
 
Messaggi: 241
Iscrizione: marzo 2008

Re: Comando per sapare se un file è stato modificato

Messaggioda Zoff » martedì 6 gennaio 2009, 22:24

fiamma ha scritto:Direi ottimo
Il problema che al posto di
Codice: Seleziona tutto
echo "E' cambiata! "$ultimaModifica


metto
Codice: Seleziona tutto
notify-send --icon=$HOME/mpla/Folder.jpg --expire-time=5000 'Playing' "$DE"


e continua  ad apparire la notifica.

Nel senso che mostra sempre il messaggio?
Ma su che file fai il controllo?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
 
Messaggi: 24437
Iscrizione: ottobre 2007
Località: Romagna!!!
Distribuzione: Ubuntu 12.04
Desktop: Unity e Gnome Shell

Re: Comando per sapare se un file è stato modificato

Messaggioda fiamma » martedì 6 gennaio 2009, 22:27

Sul file c'è l'output di mplayer, quindi al cambio di canzone viene aggiunto altro output.
Alla modifica del file parte libnotify con scritto i tag della canzone in riproduzione.
Avatar utente
fiamma
Prode Principiante
 
Messaggi: 241
Iscrizione: marzo 2008

Re: Comando per sapare se un file è stato modificato

Messaggioda Zoff » martedì 6 gennaio 2009, 22:28

fiamma ha scritto:Sul file c'è l'output di mplayer, quindi al cambio di canzone viene aggiunto altro output.
Alla modifica del file parte libnotify con scritto i tag della canzone in riproduzione.

Sicuro che non ci siano scritture più frequenti ma che non applicano modifiche?
Prova a mostrare la data di ultima modifica e controlla se l'ora cambia...
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
 
Messaggi: 24437
Iscrizione: ottobre 2007
Località: Romagna!!!
Distribuzione: Ubuntu 12.04
Desktop: Unity e Gnome Shell

Re: Comando per sapare se un file è stato modificato

Messaggioda fiamma » martedì 6 gennaio 2009, 22:32

Ci riguardo ma passando l'opzione -quiet scrive delle info su se stesso e poi i tag della canzone.
Durante le mie prove tenevo il file aperto e si modificava solo al cambio di canzone.
Avatar utente
fiamma
Prode Principiante
 
Messaggi: 241
Iscrizione: marzo 2008

Re: Comando per sapare se un file è stato modificato

Messaggioda fiamma » martedì 6 gennaio 2009, 22:41

La notifica continua anche se il file da monitorare lo cancello.
Il processo poi lo devo chiudere da gnome-system-monitor.
Avatar utente
fiamma
Prode Principiante
 
Messaggi: 241
Iscrizione: marzo 2008

Re: Comando per sapare se un file è stato modificato

Messaggioda Zoff » martedì 6 gennaio 2009, 22:43

fiamma ha scritto:La notifica continua anche se il file da monitorare lo cancello.
Il processo poi lo devo chiudere da gnome-system-monitor.

In teoria con Ctrl+C o Ctrl+Z dovrebbe chiudersi...
Boh strano...
Prova a postare il codice completo che usi...
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
 
Messaggi: 24437
Iscrizione: ottobre 2007
Località: Romagna!!!
Distribuzione: Ubuntu 12.04
Desktop: Unity e Gnome Shell

Re: Comando per sapare se un file è stato modificato

Messaggioda fiamma » martedì 6 gennaio 2009, 22:52

Questo codice lo uso con BUC, dentro ad un tag "button"
Codice: Seleziona tutto
mkfifo $HOME/mpla/foo
cd "$folder"
ls *.mp3 *.flac *.ape *.wma *.wv *.MP3 *.wav > .prova.m3u
convert Folder.jpg -resize 90x $HOME/mpla/Folder.jpg
mplayer -quiet -playlist .prova.m3u -input file=$HOME/mpla/foo > .file.txt &
ls *.mp3 *.flac *.ape *.wma *.wv *.MP3 *.wav
if grep -q * .file.txt
then
cp .file.txt file.txt
DE=`grep -q 'Title:' file.txt`
echo "$DE"
TE=`basename "$folder"`
notify-send --icon=$HOME/mpla/Folder.jpg --expire-time=5000 "$TE" "$DE"
else
sleep 2
cp .file.txt file.txt
DE=`grep -q 'Title:' file.txt | sed s/Title://g`

echo "$DE"
TE=`basename "$folder"`
notify-send --icon=$HOME/mpla/Folder.jpg --expire-time=5000 "$TE" "$DE"
fi

ultimaModifica=`stat -c %y .file.txt`

while true
do
   update=`stat -c %y .file.txt`

   
   if [ "$ultimaModifica" != "$update" ] ; then
      
      notify-send --icon=$HOME/mpla/Folder.jpg --expire-time=5000 'Playing' "$DE"
   fi
   sleep 2
done &
Avatar utente
fiamma
Prode Principiante
 
Messaggi: 241
Iscrizione: marzo 2008

Re: Comando per sapare se un file è stato modificato

Messaggioda Zoff » martedì 6 gennaio 2009, 22:57

fiamma ha scritto:Questo codice lo uso con BUC, dentro ad un tag "button"
Codice: Seleziona tutto
mkfifo $HOME/mpla/foo
cd "$folder"
ls *.mp3 *.flac *.ape *.wma *.wv *.MP3 *.wav > .prova.m3u
convert Folder.jpg -resize 90x $HOME/mpla/Folder.jpg
mplayer -quiet -playlist .prova.m3u -input file=$HOME/mpla/foo > .file.txt &
ls *.mp3 *.flac *.ape *.wma *.wv *.MP3 *.wav
if grep -q * .file.txt
then
cp .file.txt file.txt
DE=`grep -q 'Title:' file.txt`
echo "$DE"
TE=`basename "$folder"`
notify-send --icon=$HOME/mpla/Folder.jpg --expire-time=5000 "$TE" "$DE"
else
sleep 2
cp .file.txt file.txt
DE=`grep -q 'Title:' file.txt | sed s/Title://g`

echo "$DE"
TE=`basename "$folder"`
notify-send --icon=$HOME/mpla/Folder.jpg --expire-time=5000 "$TE" "$DE"
fi

ultimaModifica=`stat -c %y .file.txt`

while true
do
   update=`stat -c %y .file.txt`

   
   if [ "$ultimaModifica" != "$update" ] ; then
      
      notify-send --icon=$HOME/mpla/Folder.jpg --expire-time=5000 'Playing' "$DE"
   fi
   sleep 2
done &


Hai tolto  da dentro l'if:
Codice: Seleziona tutto
ultimaModifica=`stat -c %y $1`

rimettilo :D
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
 
Messaggi: 24437
Iscrizione: ottobre 2007
Località: Romagna!!!
Distribuzione: Ubuntu 12.04
Desktop: Unity e Gnome Shell

Re: Comando per sapare se un file è stato modificato

Messaggioda fiamma » mercoledì 7 gennaio 2009, 0:00

Perfetto!  (good)  (b2b)
Mi potresti spiegare perchè togliendo quella variabile il ciclo non funzionava bene?
Avatar utente
fiamma
Prode Principiante
 
Messaggi: 241
Iscrizione: marzo 2008

Re: Comando per sapare se un file è stato modificato

Messaggioda Zoff » mercoledì 7 gennaio 2009, 0:10

fiamma ha scritto:Perfetto!  (good)  (b2b)
Mi potresti spiegare perchè togliendo quella variabile il ciclo non funzionava bene?

Perché il programma salva la data di ultima modifica in ultimaModifica (ipotiziamo che la data sia rappresentata da A) e poi controlla direttamente il file e confronta il valore letto con la variabile, se quando ci si accorge che c'è stata la modifica (cioè il valore del file non è piu' A ma B) non si aggiorna la variabile, la variabile mantiene il vecchio valore (A) mentre l'if legge sempre il nuovo valore (che ora è B ma può cambiare ancora) continua a confrontare il valore letto con A.

L'ho spiegato maluccio spero tu abbia capito faccio un esempio:

il file ha come valore di modifica A
utlimaModifica assume valore A
finché il file mantiene lo stato A nulla accade
mplayer modifica il file in B
ultimaModifica senza quell'istruzione rimane A
A è sempre diverso da B (e poi dai futuri stati del file C, D,E,F...) per cui ad ogni ciclo mostro il messaggio

Capito?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
 
Messaggi: 24437
Iscrizione: ottobre 2007
Località: Romagna!!!
Distribuzione: Ubuntu 12.04
Desktop: Unity e Gnome Shell

Re: Comando per sapare se un file è stato modificato

Messaggioda fiamma » mercoledì 7 gennaio 2009, 23:07

Scusami ma sono duro di comprendonia  >:(
Non mi entra in testa quel
Codice: Seleziona tutto
ultimaModifica=`stat -c %y .file.txt`

dopo il then dell if.
Il concetto generale del ciclo mi è chiaro ma quello no.
I cilci while mi hanno sempre dato problemi.

Non c'è un modo per non far schizzare la cpu al massimo durante il funzionamento del ciclo?

Lo so che sto rompendo.  :-[
Avatar utente
fiamma
Prode Principiante
 
Messaggi: 241
Iscrizione: marzo 2008

Re: Comando per sapare se un file è stato modificato

Messaggioda Zoff » giovedì 8 gennaio 2009, 1:23

fiamma ha scritto:Non c'è un modo per non far schizzare la cpu al massimo durante il funzionamento del ciclo?

La CPU al 100%? ???
In teoria dovrebbe fare un ciclo ogni 2 secondi (sleep 2)... Sicuro che sia colpa di quel ciclo?

Nuovo tentativo per spiegarti quella istruzione:
Il programma funziona per confronto, per cui prima mi salvo nella variabile lo stato iniziale e poi lo confronto di volta in volta con lo stato che leggo direttamente dal file.
Quando avviene un cambiamento, ossia la variabile risulta diversa dallo stato letto, si visualizza il messaggio.
Poi è necessario aggiornare lo variabile con cui si fa il confronto altrimenti non è possibile riconoscere altri cambiamenti perché la variabile non rappresenta più lo stato attuale del file ma quello precedente che risulta ovviamente sempre diverso.
Ultima modifica di Zoff il giovedì 8 gennaio 2009, 1:27, modificato 1 volta in totale.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
 
Messaggi: 24437
Iscrizione: ottobre 2007
Località: Romagna!!!
Distribuzione: Ubuntu 12.04
Desktop: Unity e Gnome Shell

Successiva

Torna a Programmazione

Chi c’è in linea

Visualizzano questa pagina: Bakuriu, DamianFox, lucalaugh, Mazzu91, spider-net e 8 ospiti