Ho bisogno di distribuire un processo automatizzato (tramite cron script di 1 minuto) che cerca i file tar in una directory specifica. Se viene trovato un file tar, non viene tarato nella posizione appropriata e quindi il file tar viene eliminato.
I file tar vengono automaticamente copiati su questo server tramite SSH da un altro server. In alcuni casi, i file tar sono estremamente grandi, con molti file.
Il problema che mi aspetto di incontrare: se ci vogliono> 1 minuto per copiare il file tar sul server e lo script cron viene eseguito una volta al minuto, vedrà il file .tar.gz e proverà a fare decomprimerlo, anche se il file tar è ancora in fase di scrittura.
Esiste un modo (tramite comandi bash) per verificare se un file è attualmente in fase di scrittura o se si tratta solo di un file parziale, ecc.?
Un'alternativa a cui stavo pensando era quella di far copiare il file come una diversa estensione (come .tar.gz.part
) e poi rinominarlo .tar.gz
dopo che il trasferimento è completo. Ma ho pensato che avrei provato a capire se esiste semplicemente un modo per determinare se il file è intero nella riga di comando prima ... Qualche indizio?
rsync
utilizza un nome file temporaneo durante il trasferimento (per impostazione predefinita) e solo dopo che il file è stato completamente trasferito, lo rinomina nel nome file effettivo.