55 lines
1.1 KiB
Bash
55 lines
1.1 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# -----------------------------
|
|
# volumecopy: Docker Volume Copy Tool
|
|
# Usage: volumecopy <source_volume> <target_volume>
|
|
# -----------------------------
|
|
|
|
if [ "$#" -ne 2 ]; then
|
|
echo "Usage: volumecopy <source_volume> <target_volume>"
|
|
exit 1
|
|
fi
|
|
|
|
SRC="$1"
|
|
DST="$2"
|
|
|
|
echo "==> Source: $SRC"
|
|
echo "==> Target: $DST"
|
|
|
|
# Prüfen ob Volumes existieren
|
|
if ! docker volume inspect "$SRC" >/dev/null 2>&1; then
|
|
echo "ERROR: Source volume '$SRC' does not exist!"
|
|
exit 1
|
|
fi
|
|
|
|
if ! docker volume inspect "$DST" >/dev/null 2>&1; then
|
|
echo "ERROR: Target volume '$DST' does not exist!"
|
|
exit 1
|
|
fi
|
|
|
|
# Warnung bei gleichem Namen
|
|
if [ "$SRC" == "$DST" ]; then
|
|
echo "ERROR: Source and target must be different!"
|
|
exit 1
|
|
fi
|
|
|
|
echo "==> Starting copy..."
|
|
echo "!! Make sure no container is using these volumes !!"
|
|
sleep 2
|
|
|
|
docker run --rm \
|
|
-v "$SRC":/from \
|
|
-v "$DST":/to \
|
|
alpine sh -c "cp -a /from/. /to/"
|
|
|
|
echo "==> Copy completed."
|
|
|
|
# Optional: Größe vergleichen
|
|
echo "==> Comparing sizes..."
|
|
docker run --rm \
|
|
-v "$SRC":/from \
|
|
-v "$DST":/to \
|
|
alpine sh -c "du -sh /from /to"
|
|
|
|
echo "==> Done." |