09 Febbraio, 2012, 07:27:11 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia: È stato rilasciato Ubuntu 11.10 Oneiric Ocelot! Per tutte le informazioni su come ottenerlo CLICCA QUI
 
   Indice   FAQ Aiuto Regolamento Ricerca Accedi Registrati  

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 1536 volte)
0 Utenti e 1 Utente non registrato stanno visualizzando questa discussione.
fiamma
Novello Novizio

Non Connesso Non Connesso

Messaggi: 240

Media messaggi


Guardami!


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

Ciao

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

Grazie
« Ultima modifica: 08 Gennaio, 2009, 16:28:57 da fiamma » Registrato
KabaL_ScarS
Coraggioso Chiacchierone
*
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 648

Media messaggi



Mostra profilo WWW
« Risposta #1 inserita: 06 Gennaio, 2009, 19: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 10.04 LTS Lucid Lynx 64bit
http://h10025.www1.hp.com/ewfrf/wc/document?docname=c00786030&lc=en&cc=us&dlc=en&product=3279896&rule=14752&lang=en
Asus EEE pc 901 Ubuntu 10.04 LTS Lucid Lynx Netbook Remix 32bit
http://eeepc.asus.com/global/product901.html?n=0
zaxxon
Novello Novizio

Non Connesso Non Connesso

Messaggi: 182

Media messaggi



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

Se hai l'originale puoi confrontarlo con un altro con il comando diff.
Registrato
fiamma
Novello Novizio

Non Connesso Non Connesso

Messaggi: 240

Media messaggi


Guardami!


Mostra profilo
« Risposta #3 inserita: 06 Gennaio, 2009, 19: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
Moderatore Globale
Illuminato Imbonitore
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 23.256

Media messaggi


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


Mostra profilo
« Risposta #4 inserita: 06 Gennaio, 2009, 19: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

Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
l3on
Amministratore del Wiki
Moderatore Globale
Pimpante Precettore
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 5.490

Media messaggi


Mono+Gtk# -> Forte!


Mostra profilo WWW
« Risposta #5 inserita: 06 Gennaio, 2009, 20: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

Amministratore del Wiki, Amministratore del Sito e Moderatore del Forum. Con Ubuntu-it dal maggio del 2006.
Zoff
Moderatore Globale
Illuminato Imbonitore
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 23256

Media messaggi


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


Mostra profilo
« Risposta #6 inserita: 06 Gennaio, 2009, 20: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

Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
fiamma
Novello Novizio

Non Connesso Non Connesso

Messaggi: 240

Media messaggi


Guardami!


Mostra profilo
« Risposta #7 inserita: 06 Gennaio, 2009, 21: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
Moderatore Globale
Illuminato Imbonitore
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 23256

Media messaggi


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


Mostra profilo
« Risposta #8 inserita: 06 Gennaio, 2009, 21: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

Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
fiamma
Novello Novizio

Non Connesso Non Connesso

Messaggi: 240

Media messaggi


Guardami!


Mostra profilo
« Risposta #9 inserita: 06 Gennaio, 2009, 21: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
Moderatore Globale
Illuminato Imbonitore
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 23256

Media messaggi


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


Mostra profilo
« Risposta #10 inserita: 06 Gennaio, 2009, 21: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

Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
fiamma
Novello Novizio

Non Connesso Non Connesso

Messaggi: 240

Media messaggi


Guardami!


Mostra profilo
« Risposta #11 inserita: 06 Gennaio, 2009, 21: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
Novello Novizio

Non Connesso Non Connesso

Messaggi: 240

Media messaggi


Guardami!


Mostra profilo
« Risposta #12 inserita: 06 Gennaio, 2009, 21: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
Moderatore Globale
Illuminato Imbonitore
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 23256

Media messaggi


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


Mostra profilo
« Risposta #13 inserita: 06 Gennaio, 2009, 21: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

Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
fiamma
Novello Novizio

Non Connesso Non Connesso

Messaggi: 240

Media messaggi


Guardami!


Mostra profilo
« Risposta #14 inserita: 06 Gennaio, 2009, 21: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
Moderatore Globale
Illuminato Imbonitore
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 23256

Media messaggi


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


Mostra profilo
« Risposta #15 inserita: 06 Gennaio, 2009, 21: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

Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
fiamma
Novello Novizio

Non Connesso Non Connesso

Messaggi: 240

Media messaggi


Guardami!


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

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

Sesso: Maschio
Messaggi: 23256

Media messaggi


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


Mostra profilo
« Risposta #17 inserita: 06 Gennaio, 2009, 23: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

Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
fiamma
Novello Novizio

Non Connesso Non Connesso

Messaggi: 240

Media messaggi


Guardami!


Mostra profilo
« Risposta #18 inserita: 07 Gennaio, 2009, 22: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
Moderatore Globale
Illuminato Imbonitore
*****
Non Connesso Non Connesso

Sesso: Maschio
Messaggi: 23256

Media messaggi


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


Mostra profilo
« Risposta #19 inserita: 08 Gennaio, 2009, 00: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, 00:27:04 da Zoff » Registrato

Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Pagine: [1] 2  Tutto   Vai su
  Stampa  
 
Vai a: