``` > xo-backups create-symlink-indexes ./xo-vm-backups vm.name_label > ls ./xo-vm-backups/indexes/vm.name_label Debian\ 9.5\ 64bit\ web9 -> ../../c60dc26a-49e8-be58-6ae4-175cf03b19d5/ Prod\ VM -> ../../1498796a-3d23-d0cc-74be-b25d6e598c03/ ```
29 lines
996 B
JavaScript
29 lines
996 B
JavaScript
const filenamify = require('filenamify')
|
|
const get = require('lodash/get')
|
|
const { dirname, join, relative } = require('path')
|
|
|
|
const asyncMap = require('../_asyncMap')
|
|
const { mktree, readdir2, readFile, symlink2 } = require('../_fs')
|
|
|
|
module.exports = async function createSymlinkIndex([backupDir, fieldPath]) {
|
|
const indexDir = join(backupDir, 'indexes', filenamify(fieldPath))
|
|
await mktree(indexDir)
|
|
|
|
await asyncMap(await readdir2(backupDir), async vmDir =>
|
|
asyncMap(
|
|
(await readdir2(vmDir)).filter(_ => _.endsWith('.json')),
|
|
async json => {
|
|
const metadata = JSON.parse(await readFile(json))
|
|
const value = get(metadata, fieldPath)
|
|
if (value !== undefined) {
|
|
const target = relative(indexDir, dirname(json))
|
|
const path = join(indexDir, filenamify(String(value)))
|
|
await symlink2(target, path).catch(error => {
|
|
console.warn('symlink(%s, %s)', target, path, error)
|
|
})
|
|
}
|
|
}
|
|
)
|
|
)
|
|
}
|