Назад | Перейти на главную страницу

Как синхронизировать файлы XML и сохранить их как .gz в месте назначения с помощью rsync

Я использую rsync -z для резервного копирования большого количества файлов XML. Источник - огромная машина с тысячами ГБ на диске, но место назначения не так уж и мощно.

Я хочу сжимать файлы XML во время передачи и сохранять их сжатыми в месте назначения. Параметр -z выполняет сжатие только во время передачи.

Можно ли сделать это с помощью одной команды crontab?

Я сейчас использую эту команду:

*/30 * * * * rsync -rz -e 'sshpass -p "MY_PASSWORD" ssh -p 5022' --ignore-existing --quiet --delete REMOTE_USER@REMOTE_HOST:/path/to/remote/ /path/to/local/

Мне удалось решить эту проблему с помощью обходного пути. На локальном хосте я просто сжимаю синхронизированный файл и перезаписываю исходный файл строкой «0». Это предотвращает повторную синхронизацию того же файла с помощью rsync и значительно снижает нагрузку на диск.

exec('find /path/to/local/ -name "*.xml" -size +10k',$output);
foreach ($output as $key => $filepath) {`
        
        //gzip the xml file
        $gz = gzopen("/path/to/gz/".basename($filepath).".gz", "wb9");
        gzwrite($gz, file_get_contents($filepath));
        gzclose($gz);
        
        //overwrite xml file
        $xml = fopen($filepath,"w");
        fwrite($xml, "0");
        fclose($xml);
}