You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.1 KiB
JavaScript
83 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
const fs = require('fs');
|
|
const shell = require('shelljs');
|
|
const config = require('../etc/config.json');
|
|
|
|
const CONFIG_FILE = '/root/.config/rclone/rclone.conf';
|
|
const CONFIG_FILE_EXAMPLE = '/root/.config/rclone/rclone.conf.example';
|
|
|
|
if (!fs.existsSync(CONFIG_FILE)) {
|
|
console.log(`Cannot find "${CONFIG_FILE}". An example configuration can be found in "${CONFIG_FILE_EXAMPLE}".`);
|
|
shell.exit(1);
|
|
}
|
|
|
|
function main() {
|
|
console.log('Start google drive sync.');
|
|
|
|
if (!config.remotes) {
|
|
console.log('No remotes found to sync.');
|
|
shell.exit(1);
|
|
}
|
|
|
|
config.remotes.forEach((remote) => {
|
|
validateRemote(remote);
|
|
|
|
const source = remote.source || config.defaultSource || '/';
|
|
const syncOptions = remote.syncOptions || config.defaultSyncOptions || '';
|
|
|
|
if (remote.syncLocalToRemote) {
|
|
syncLocalToRemote(
|
|
remote.name,
|
|
source,
|
|
remote.destination,
|
|
syncOptions
|
|
);
|
|
} else {
|
|
syncRemoteToLocal(
|
|
remote.name,
|
|
source,
|
|
remote.destination,
|
|
syncOptions
|
|
);
|
|
}
|
|
});
|
|
|
|
if (config.runOnce) {
|
|
console.log('Sync is finished once.');
|
|
shell.exit(0);
|
|
}
|
|
|
|
setTimeout(main, config.syncInterval || 60000);
|
|
}
|
|
|
|
function validateRemote(remote) {
|
|
if (!remote.name) {
|
|
console.log('No name found for the remote.');
|
|
shell.exit(1);
|
|
}
|
|
|
|
if (!remote.destination) {
|
|
console.log(`No distination found for remote ${remote.name}.`);
|
|
shell.exit(1);
|
|
}
|
|
}
|
|
|
|
function syncRemoteToLocal(remote, source, destination, syncOptions) {
|
|
console.log(`Sync files from remote ${remote}:${source} to local ${destination}`);
|
|
|
|
shell.exec(`rclone sync ${remote}:${source} ${destination} ${syncOptions} -v`);
|
|
|
|
console.log(`Finished syncing files to local ${destination}`);
|
|
}
|
|
|
|
function syncLocalToRemote(remote, source, destination, syncOptions) {
|
|
console.log(`Sync files from local ${source} to remote ${remote}:${destination}`);
|
|
|
|
shell.exec(`rclone sync ${source} ${remote}:${destination} ${syncOptions} -v`);
|
|
|
|
console.log(`Finished syncing files to remote ${remote}:${destination}`);
|
|
}
|
|
|
|
main();
|