Necesito implementar un proceso automatizado (a través de un script cron de 1 min) que busca archivos tar en un directorio específico. Si se encuentra un archivo tar, no está marcado en la ubicación adecuada y luego se elimina el archivo tar.
Los archivos tar se copian automáticamente a este servidor a través de SSH desde otro servidor. En algunos casos, los archivos tar son extremadamente grandes, con muchos archivos.
El problema con el que espero encontrarme: si el archivo tar tarda más de 1 minuto en copiarse en el servidor y el script cron se ejecuta una vez cada minuto, verá el archivo .tar.gz e intentará hacerlo descomprimirlo, a pesar de que el archivo tar todavía está en proceso de ser escrito.
¿Hay alguna forma (a través de comandos bash) de probar si un archivo se está escribiendo actualmente, o si es solo un archivo parcial, etc.?
Una alternativa en la que estaba pensando era copiar el archivo como una extensión de archivo diferente (como .tar.gz.part
) y luego cambiarle el nombre una .tar.gz
vez completada la transferencia. Pero pensé que intentaría averiguar si simplemente hay una manera de determinar si el archivo está completo en la línea de comando primero ... ¿Alguna pista?
rsync
usa un nombre de archivo temporal durante la transferencia (por defecto), y solo después de que el archivo se haya transferido por completo, cambia el nombre al nombre de archivo real.