#!/bin/bash kopiaRestoreSnapshot() { local idx="$1" local snapshot_id="$2" local target_dir="$3" local include_path="$4" # ignored — kopia restores by snapshot id directly if [[ -z "$snapshot_id" || -z "$target_dir" ]]; then isError "kopiaRestoreSnapshot requires snapshot_id and target_dir" return 1 fi kopiaEnvExport "$idx" || return 1 runFileOp mkdir -p "$target_dir" isNotice "Restoring ${snapshot_id:0:12} from $(resticLocationName "$idx") → $target_dir" # Kopia's restore lays down the snapshot's source tree relative to target. # If include_path was given (we always pass /docker/containers/), we # nest into that subpath under target so it matches restic's behaviour. local final_target="$target_dir" if [[ -n "$include_path" ]]; then final_target="$target_dir/${include_path#/}" runFileOp mkdir -p "$final_target" fi runBackupOp kopia snapshot restore "$snapshot_id" "$final_target" local rc=$? kopiaEnvUnset return $rc } kopiaDumpFile() { local idx="$1" local snapshot_id="$2" local file_path="$3" local target_file="$4" kopiaEnvExport "$idx" || return 1 # `kopia show` writes the file contents from a snapshot to stdout. if [[ -n "$target_file" ]]; then runBackupOp kopia show "${snapshot_id}:${file_path}" | runBackupOp tee "$target_file" >/dev/null else runBackupOp kopia show "${snapshot_id}:${file_path}" fi local rc=$? kopiaEnvUnset return $rc }