Cambia tema in:  • Kubuntu  • Xubuntu  • Edubuntu  
04 Luglio, 2009, 10:52:09 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia: È uscito il numero 26 della Newsletter italiana di Ubuntu! Lo trovate qui. Buona lettura... e partecipate al sondaggio!
 
   Indice   Aiuto Regolamento Ricerca Agenda Accedi Registrati  

Guide
Programmazione
Wiki
Programmazione   •   Editor di Testo   •   Linguaggio Bash
Pagine: [1] 2  Tutto   Vai giù
  Stampa  
Autore Discussione: [Risolto] Comando per sapare se un file è stato modificato  (Letto 446 volte)
0 Utenti e 1 Utente non registrato stanno visualizzando questa discussione.
fiamma
Jr. Member
**
Non Connesso Non Connesso

Messaggi: 146

Media messaggi



Mostra profilo
« inserita: 06 Gennaio, 2009, 20:02:38 »

Ciao

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

Grazie
« Ultima modifica: 08 Gennaio, 2009, 17:28:57 da fiamma » Registrato
KabaL_ScarS
Sr. Member
****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 563

Media messaggi



Mostra profilo WWW
« Risposta #1 inserita: 06 Gennaio, 2009, 20:10:30 »

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.
Registrato

Notebook HP DV2172ea Ubuntu 9.04 Jaunty Jackalope 64bit
http://h10025.www1.hp.com/ewfrf/wc/document?docname=c00786030&lc=en&cc=us&dlc=...
Asus EEE pc 901 Ubuntu 9.04 Jaunty Jackalope 32bit
http://eeepc.asus.com/global/product901.html?n=0
zaxxon
Jr. Member
**
Non Connesso Non Connesso

Messaggi: 181

Media messaggi



Mostra profilo
« Risposta #2 inserita: 06 Gennaio, 2009, 20:11:54 »

Se hai l'originale puoi confrontarlo con un altro con il comando diff.
Registrato
fiamma
Jr. Member
**
Non Connesso Non Connesso

Messaggi: 146

Media messaggi



Mostra profilo
« Risposta #3 inserita: 06 Gennaio, 2009, 20:52:25 »

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  Smiley
Registrato
Zoff
Hero Member
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 5.622

Media messaggi


Ubuntu user #24913 :D :D :D Linux user #471539


Mostra profilo WWW
« Risposta #4 inserita: 06 Gennaio, 2009, 20:54:05 »

Se invece vuoi fare un controllo temporale puoi sare il comando stat
Codice:
stat nomeFile | grep -i modify
mostra la data di ultima modifica.

ciauz
Registrato

"Real programmers always confuse Halloween and Christmas 'cause 31oct = 25dec"
Let him who hath understanding reckon the number of the beast for it is a human number its number is rw-rw-rw-
l3on
Amministratore del Wiki
Moderatore Globale
Hero Member
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 4.452

Media messaggi


Mono+Gtk# -> Forte!


Mostra profilo
« Risposta #5 inserita: 06 Gennaio, 2009, 21:22:11 »

Se invece vuoi fare un controllo temporale puoi sare il comando stat
Codice:
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.
Registrato

Pagina Personale sul Wiki - Sito Personale - Blog - JabberID: l3on@jabber.linux.it

Quando non sai cosa fare, invia un messaggio privato di spam a RQ !
Zoff
Hero Member
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 5622

Media messaggi


Ubuntu user #24913 :D :D :D Linux user #471539


Mostra profilo WWW
« Risposta #6 inserita: 06 Gennaio, 2009, 21:41:54 »

Ecco uno script che dovrebbe fare quello che chiedi:
Codice:
#! /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

Se invece vuoi fare un controllo temporale puoi sare il comando stat
Codice:
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 Cheesy
Registrato

"Real programmers always confuse Halloween and Christmas 'cause 31oct = 25dec"
Let him who hath understanding reckon the number of the beast for it is a human number its number is rw-rw-rw-
fiamma
Jr. Member
**
Non Connesso Non Connesso

Messaggi: 146

Media messaggi



Mostra profilo
« Risposta #7 inserita: 06 Gennaio, 2009, 22:10:20 »

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

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

e continua  ad apparire la notifica.
Registrato
Zoff
Hero Member
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 5622

Media messaggi


Ubuntu user #24913 :D :D :D Linux user #471539


Mostra profilo WWW
« Risposta #8 inserita: 06 Gennaio, 2009, 22:24:01 »

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

metto
Codice:
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?
Registrato

"Real programmers always confuse Halloween and Christmas 'cause 31oct = 25dec"
Let him who hath understanding reckon the number of the beast for it is a human number its number is rw-rw-rw-
fiamma
Jr. Member
**
Non Connesso Non Connesso

Messaggi: 146

Media messaggi



Mostra profilo
« Risposta #9 inserita: 06 Gennaio, 2009, 22:27:00 »

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.
Registrato
Zoff
Hero Member
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 5622

Media messaggi


Ubuntu user #24913 :D :D :D Linux user #471539


Mostra profilo WWW
« Risposta #10 inserita: 06 Gennaio, 2009, 22:28:30 »

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...
Registrato

"Real programmers always confuse Halloween and Christmas 'cause 31oct = 25dec"
Let him who hath understanding reckon the number of the beast for it is a human number its number is rw-rw-rw-
fiamma
Jr. Member
**
Non Connesso Non Connesso

Messaggi: 146

Media messaggi



Mostra profilo
« Risposta #11 inserita: 06 Gennaio, 2009, 22:32:29 »

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.
Registrato
fiamma
Jr. Member
**
Non Connesso Non Connesso

Messaggi: 146

Media messaggi



Mostra profilo
« Risposta #12 inserita: 06 Gennaio, 2009, 22:41:32 »

La notifica continua anche se il file da monitorare lo cancello.
Il processo poi lo devo chiudere da gnome-system-monitor.
Registrato
Zoff
Hero Member
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 5622

Media messaggi


Ubuntu user #24913 :D :D :D Linux user #471539


Mostra profilo WWW
« Risposta #13 inserita: 06 Gennaio, 2009, 22:43:10 »

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...
Registrato

"Real programmers always confuse Halloween and Christmas 'cause 31oct = 25dec"
Let him who hath understanding reckon the number of the beast for it is a human number its number is rw-rw-rw-
fiamma
Jr. Member
**
Non Connesso Non Connesso

Messaggi: 146

Media messaggi



Mostra profilo
« Risposta #14 inserita: 06 Gennaio, 2009, 22:52:54 »

Questo codice lo uso con BUC, dentro ad un tag "button"
Codice:
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 &
Registrato
Zoff
Hero Member
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 5622

Media messaggi


Ubuntu user #24913 :D :D :D Linux user #471539


Mostra profilo WWW
« Risposta #15 inserita: 06 Gennaio, 2009, 22:57:13 »

Questo codice lo uso con BUC, dentro ad un tag "button"
Codice:
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:
ultimaModifica=`stat -c %y $1`
rimettilo Cheesy
Registrato

"Real programmers always confuse Halloween and Christmas 'cause 31oct = 25dec"
Let him who hath understanding reckon the number of the beast for it is a human number its number is rw-rw-rw-
fiamma
Jr. Member
**
Non Connesso Non Connesso

Messaggi: 146

Media messaggi



Mostra profilo
« Risposta #16 inserita: 07 Gennaio, 2009, 00:00:38 »

Perfetto!  Good  Beer to beer
Mi potresti spiegare perchè togliendo quella variabile il ciclo non funzionava bene?
Registrato
Zoff
Hero Member
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 5622

Media messaggi


Ubuntu user #24913 :D :D :D Linux user #471539


Mostra profilo WWW
« Risposta #17 inserita: 07 Gennaio, 2009, 00:10:17 »

Perfetto!  Good  Beer to beer
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?
Registrato

"Real programmers always confuse Halloween and Christmas 'cause 31oct = 25dec"
Let him who hath understanding reckon the number of the beast for it is a human number its number is rw-rw-rw-
fiamma
Jr. Member
**
Non Connesso Non Connesso

Messaggi: 146

Media messaggi



Mostra profilo
« Risposta #18 inserita: 07 Gennaio, 2009, 23:07:18 »

Scusami ma sono duro di comprendonia  Angry
Non mi entra in testa quel
Codice:
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.  Embarrassed
Registrato
Zoff
Hero Member
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 5622

Media messaggi


Ubuntu user #24913 :D :D :D Linux user #471539


Mostra profilo WWW
« Risposta #19 inserita: 08 Gennaio, 2009, 01:23:47 »

Non c'è un modo per non far schizzare la cpu al massimo durante il funzionamento del ciclo?
La CPU al 100%? Huh?
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: 08 Gennaio, 2009, 01:27:04 da Zoff » Registrato

"Real programmers always confuse Halloween and Christmas 'cause 31oct = 25dec"
Let him who hath understanding reckon the number of the beast for it is a human number its number is rw-rw-rw-
Pagine: [1] 2  Tutto   Vai su
  Stampa  
 
Vai a: