Soluzione 1:
GNU tar ha un'opzione --newer-mtime, che richiede un argomento data, che presumibilmente sarebbe l'ultima volta che hai eseguito un backup. A seconda di quanto lavoro vuoi ripristinare il filesystem, questo potrebbe essere l'ultimo backup completo, nel qual caso dovresti ripristinare il dump completo e l'ultimo giornaliero, oppure potresti farlo dall'ultimo backup incrementale, in cui caso, dovresti ripristinare il dump completo e ogni dump successivo.
Questa opzione si basa sul timestamp della modifica sul file, quindi se è stato modificato in modo esplicito, c'è la possibilità che il tuo backup lo perda.
Soluzione 2:
L'utility incron utilizza inotify per eseguire i comandi quando si verificano eventi del file system. Il file di configurazione è come un crontab, ma al posto delle volte specifichi percorsi ed eventi.
Il comando potrebbe essere il tuo script di backup (nel qual caso il backup verrà avviato quasi immediatamente dopo che i file sono stati modificati), oppure potresti fare in modo che crei un file e che lo script di backup verifichi l'esistenza di quel file e quindi lo cancelli. Se il file esiste, si è verificato uno degli eventi dall'ultima esecuzione.
Soluzione 3:
Puoi sempre reindirizzare find l'output di in wc e ottieni un numero intero di file modificati:
find . -ctime 1 | wc -l
Sebbene la risposta di David richieda meno modifiche al codice :)
Soluzione 4:
Questa è un'idea un po' folle, ma potresti giocare un po' con md5sum e ls.
Questa idea è di guardare solo un md5sum di un file e che quel file è un elenco di file della directory che stai guardando. E finché non cambia nulla, la somma md5 è la stessa. Ma se un timestamp viene aggiornato, l'md5sum cambierà e sai che devi fare un nuovo tar e inviarlo al tuo server ftp.
Potremmo iniziare con qualcosa di simile
ls -lR /path/to/dir/ | md5sum > file_list.txt.md5
Quindi dovresti aggiungere un confronto tra il vecchio md5 e l'attuale... etc etc
/Giovanni
Soluzione 5:
Le versioni recenti di GNU find hanno l'azione "-quit", che fa sì che find interrompa immediatamente la ricerca:
— Azione:-quit
Esci immediatamente (con valore di ritorno zero se non si sono verificati errori). Questo è diverso da '-prune' perché '-prune' si applica solo al contenuto delle directory sfoltite, mentre '-quit' fa semplicemente fermare immediatamente find. Nessun processo figlio verrà lasciato in esecuzione, ma non verranno elaborati altri file specificati nella riga di comando. Ad esempio, find /tmp/foo /tmp/bar -print -quit stamperà solo '/tmp/foo'. Tutte le righe di comando create da "-exec ... +" o "-execdir ... +" vengono richiamate prima che il programma venga chiuso.
È possibile utilizzare un'espressione di ricerca per trovare i file che sono stati modificati e utilizzare -esci per interrompere non appena ne trovi uno. Dovrebbe essere più veloce di find che continua la sua scansione.
-quit è stato aggiunto in fileutils V4.2.3