Я понимаю, что вы хотите распаковать файлы в целевом назначении. Вы хотите, чтобы цель была как можно более актуальной («онлайн-операция»), или это одноразовая задача, и вам не нужно продолжать повторять операцию после ее завершения? Если вы используете это как онлайн-операцию, вы должны использовать WatchService для поиска изменений. В unix-подобной среде (весьма вероятно, поскольку .gz в основном используется в unix), это использует системный вызов inotify
и очень эффективен.
Это проблема, если вы получаете противоречивое состояние? То есть, если файлы dir1/3.gz
и dir2/3.gz
были обновлены одновременно, это проблема, если dir1/3.gz
скопирована, но dir2/3.gz
нет? Вы можете защитить данные данные от
- проверка целостности копии перед завершением операции. Это будет включать отказ в доступе до тех пор, пока
dir2/3.gz
не будет скопирован, и все будет согласовано; вы можете, например, использовать WatchService для прослушивания изменений, которые происходят во время копирования. Затем вы обработали эти изменения и только закончите операцию после того, как все стабилизируется: все изменения обработаны и X секунд без изменений.
- копирование только полностью согласованных состояний (то есть не копирование
dir1/3.gz
, если dir2/3.gz
также не копируется). Вы можете сделать это, просмотрев временные метки и не копируя ничего, что было изменено за последние X секунд до начала вашей программы.
Я понимаю, что причина несжатия во временном каталоге перед перемещением в конечный пункт назначения заключается в том, чтобы избежать несогласованных состояний. В противном случае ваша программа будет работать быстрее, если не требуется перемещение (то есть: распаковать непосредственно в целевой каталог).