Usa rsync per copiare automaticamente un file in un'altra cartella

5

Ho trovato questo comando per copiare il contenuto del sorgente in una cartella di destinazione.

rsync -r source/* destination

Quello che vorrei davvero è avere questo comando eseguito automaticamente ogni volta che un file viene aggiunto alla mia cartella sorgente.

È possibile?

    
posta izzur 28.12.2013 - 12:09
fonte

3 risposte

6

Potresti utilizzare le azioni di Automator e Folder per guardare la cartella ed eseguire lo script.

Quando si avvia Automator e si sceglie Nuovo, una delle opzioni fornite è di creare una "Azione cartella". Nella parte superiore dello schermo, dopo aver selezionato Azione cartella, viene data l'opzione di scegliere una cartella da "guardare".

Quellochepensochevorrestifareneltuocasoèquindiselezionare"Utilità" nella colonna più a sinistra, quindi trascinare "Esegui script di shell" dalla seconda colonna nella finestra del flusso di lavoro.

Quipuoiscriverequalsiasiscripttuvogliaeseguirequandovengonoapportatemodificheallacartella.Inquestocasoloscriptrsync.

    
risposta data 29.12.2013 - 03:39
fonte
3

Una soluzione rapida e sporca a questa domanda che è portatile su piattaforme UNIX (non specifica per OSX, ma può essere utilizzata su HP-UX, Solaris, Linux, ecc.) è chiamare rsync dal crontab dell'utente e lasciare che la stessa logica di sincronizzazione della cartella di rsync determini se la cartella è stata cambiata o meno. Un perfezionamento dell'uso di questa soluzione portatile è di racchiudere la chiamata in rsync con un test della data tra un file toccato (in realtà il suo tempo di modifica) e il tempo di modifica della cartella deve essere sincronizzato, ma questo non è necessario a meno che le cartelle da sincronizzare siano molto grandi (profonde e / o ampie). Una singola cartella con diverse sottocartelle è l'ideale per questa soluzione.

Una voce per il crontab che eseguirà il caso "rapido e sporco" in un intervallo di polling minuto è:

# run sync every minute:
* * * * * /usr/bin/rsync -avz $HOME/source_path $HOME/target/path 1>> $HOME/.my_sync.log 2>&1

Dovrebbe farlo per il caso rapido e sporco - in altre parole, le cartelle saranno mantenute aggiornate entro un minuto dal cambiamento. Controlla il file ~ / .my_sync.log per gli stati di esecuzione - questo file crescerà senza limiti nel tempo, quindi una volta determinata l'operazione corretta, modifica "> >" a ">" per registrare almeno lo stato rsync più recente.

Un altro puntatore è che l'opzione -z di rsync dovrebbe essere usata durante la sincronizzazione su una rete. L'opzione -z causerà la compressione da utilizzare per i trasferimenti di file di rete. Quando si usa rsync per sincronizzare tra cartelle su file system locali a un server, l'opzione -z può essere di solito omessa.

Nota sull'uso di crontab:

Se non puoi modificare il tuo crontab con:

$ crontab -e

Quindi dovrai darti il permesso di avere un crontab. Vedi la pagina man di crontab. In OSX, questo è ciò che deve essere fatto - la modifica è leggermente diversa sui sistemi Linux: In poche parole, assicurati che il tuo id utente sia in /usr/lib/cron/cron.allow o che / usr / lib / cron / cron.allow non esiste. Inoltre, assicurati che l'ID utente non sia in /usr/lib/cron/cron.deny.

    
risposta data 29.12.2013 - 06:22
fonte
1

Lo strumento che utilizzerei per monitorare le tue cartelle è Hazel . Sarebbe fantastico dare il via allo script e si potrebbe finire per usarlo per molte altre cartelle nel tempo, mentre pensi a cose che potresti automatizzare.

    
risposta data 29.12.2013 - 03:55
fonte

Leggi altre domande sui tag