上書き確認しながら安全にバックアップ|cp -iでフォルダ丸ごとコピー

バックアップ・復元

「誤って上書きしてしまった…」を防ぎつつ、フォルダごと素早くバックアップしたい人向けの実践ガイドです。

cp -i(interactive)は上書きの前に確認を求めてくれるので、安全第一の手動バックアップに最適。LinuxとmacOSで使える基本〜応用までを一気にまとめます。

この記事でできること(コピペ可・最短ルート)

  • 権限ごと安全にバックアップ(上書き確認あり)
cp -ai /path/to/SRC_DIR /path/to/DEST_PARENT/
  • 隠しファイルも含めて中身だけをコピー(上書き確認あり)
cp -ai /path/to/SRC_DIR/. /path/to/DEST_DIR/
  • 外付けHDDに日付付きで履歴バックアップ(上書き確認あり)
STAMP=$(date +%F)
cp -ai /path/to/SRC_DIR "/Volumes/Backup/$STAMP-SRC_DIR"

cp -i とは?(まずは要点だけ)

  • -i上書きの直前に確認プロンプト を出します(interactive)。
  • 「安全>速度」のときに有効。急ぎでない手動バックアップに最適。
  • -r(再帰)や -a(アーカイブ)と組み合わせて使うのが定番です。

おすすめ組み合わせcp -ai
メタデータ(権限・タイムスタンプ・シンボリックリンクなど)を極力保持しつつ、上書き前に確認できます。

基本:フォルダを丸ごとコピーする

親ディレクトリへ「そのまま」持っていく

cp -ai /path/to/SRC_DIR /path/to/DEST_PARENT/
# → /path/to/DEST_PARENT/SRC_DIR として作成(既存なら上書き前に確認)

既存ディレクトリへ「中身だけ」入れたいとき

cp -ai /path/to/SRC_DIR/. /path/to/DEST_DIR/
# 「.」を使うと SRC_DIR の“中身”を DEST_DIR に展開

隠しファイル(.git など)も含めたいとき

SRC_DIR を丸ごとコピーする形(SRC_DIRSRC_DIR/.)なら 隠しファイルも含まれます
ワイルドカード(*)で中身を選ぶと隠しファイルが漏れるので注意。

上書き確認の対話例(何が起きるか見ておく)

cp -ai src/. dest/
cp: overwrite 'dest/config.yaml'? y
'./config.yaml' -> 'dest/config.yaml'
cp: overwrite 'dest/logo.png'? n
cp: not overwriting 'dest/logo.png'
  • y で上書き、n でスキップ。
  • まとめて自動化したい場合は -i ではなく -n(no-clobber:上書きしない) を使います(後述)。

ケース別のコツと落とし穴

1) 目的地(DEST)が存在する / しない

  • 存在する(かつフォルダ)→ DEST/SRC_DIR を作る or 中身を入れる(使い分けは SRC_DIR vs SRC_DIR/.
  • 存在しないDEST という新しいフォルダ名でコピーを作成

2) 末尾スラッシュ(/)の意味

  • cprsync ほど末尾スラッシュの意味がシビアではありませんが、
    「中身だけ」なら SRC_DIR/. と明示するのが確実です。

3) 権限・時刻を保ちたい

  • -a(アーカイブ)を使いましょう。-RpP 相当(環境により実装差あり)で、メタデータを極力維持します。

4) シンボリックリンクの扱い

  • -a はリンクをリンクのままコピー(推奨)
  • リンク先の実体をコピーしたいなら -L を併用

5) 大量ファイル & ネットワーク越し

  • cp はシンプルで速いですが、差分除外が必要なら rsync を検討(下記参照)。

よく使うオプション(安全強化に効く)

オプション目的・効果
-i上書き前に確認(安全)cp -ai SRC DEST/
-n上書きしない(無言でスキップ)cp -an SRC/. DEST/
-u変更が新しいものだけ上書きcp -au SRC/. DEST/
-v進捗を表示cp -aiv SRC DEST/
-pタイムスタンプ等を保持cp -ipR SRC DEST/
-aアーカイブ(ほぼ全部維持)cp -ai SRC DEST/
--backup / -b上書き時にバックアップファイル作成(GNU系)cp -aiv --backup=numbered SRC/. DEST/

互換性メモ
GNU(多くのLinux)とBSD系(macOS)で対応オプションが異なることがあります。
例:--backup=numberedGNU限定。macOS では代わりに -i-n を使う、もしくは rsync へ切替。

外付けHDD/USBに安全バックアップ

1) 丸ごとコピー(権限保持・上書き確認)

cp -ai /project/data "/Volumes/BackupDisk/"
# → /Volumes/BackupDisk/data を作成

2) 日付付き履歴を残す

STAMP=$(date +%F)  # 例: 2025-08-23
cp -ai /project/data "/Volumes/BackupDisk/${STAMP}-data"

3) 古い履歴を30日でローテーション(任意)

find "/Volumes/BackupDisk" -maxdepth 1 -type d -name "20??-??-??-data" -mtime +30 -exec rm -rf {} +

安全ポイント
消去系コマンドは最初に -exec echo rm -rf {} + として“表示だけ”試すのが鉄則。

スクリプト化テンプレ(安全ガード付き)

#!/usr/bin/env bash
set -euo pipefail

SRC="/path/to/SRC_DIR"
DEST_PARENT="/path/to/DEST_PARENT"
STAMP=$(date +%F)
DEST="${DEST_PARENT}/${STAMP}-$(basename "$SRC")"

[[ -d "$SRC" ]] || { echo "SRC not found: $SRC" >&2; exit 1; }
mkdir -p "$DEST_PARENT"

echo "Copying '$SRC' -> '$DEST'"
cp -ai "$SRC" "$DEST_PARENT"/
echo "Done: $DEST"
  • -i なので途中で上書き確認が止まる点に注意(夜間バッチには不向き)。
    無人実行は -n(上書き回避)や日付で新規作成にしましょう。

トラブル時のチェックリスト

  • 隠しファイルがコピーされない
    SRC_DIR/. で中身コピー、またはフォルダごとコピー(SRC_DIR)を使う。* 展開は避ける。
  • Permission denied
    → 読み取り権限があるか、sudo 必要かを確認。対象FSのマウントオプションも要確認。
  • 無人で止まる(プロンプト待ち)
    -i をやめて -n に変更、または毎回新しい履歴ディレクトリを作成。
  • シンボリックリンクでループ
    -a-P を使う(リンクはリンクのまま)。実体が要るなら -L
  • 属性が失われる
    -a を利用。別FS(FAT/exFAT等)では保持できない属性がある点に注意。

いつ rsync を使うべき?

  • 差分コピー・除外パターン・進捗・ネットワーク越しなど、運用が重くなるほど rsync の出番です。
  • rsync で「上書き回避」に近い挙動は --ignore-existing
rsync -av --ignore-existing /path/to/SRC_DIR/. /path/to/DEST_DIR/

まとめ

  • 手動で安全にバックアップするなら cp -i がシンプルで強力。
  • 権限や時刻も保持したいなら cp -ai が定番。
  • 無人実行・差分・除外が必要になったら -nrsync を検討。
  • 事故を防ぐコツは「SRC_DIR/. で中身指定」「履歴は日付で新規作成」「削除はまずドライラン」。

上書き確認の一手間が、取り返しのつかない事故を確実に減らします。まずは今日の大事なフォルダから、cp -ai で“安全第一のバックアップ”を。

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント