はじめに

こんにちは!今回はcpコマンドについて解説します。

cpはファイルやディレクトリをコピーするコマンドです。バックアップを作ったり、プロジェクトファイルを複製したりと、毎日使う超基本的なコマンドですね。

「コピペ」のコマンド版って感じです。めっちゃ使います。

cpコマンドとは

cpは、ファイルやディレクトリをコピーする外部コマンドです。“copy"の略ですね。

元のファイルはそのまま残して、同じ内容の複製を作ります。ファイル名を変えたり、別のディレクトリにコピーしたり、属性を保持したまま複製したりできます。

基本構文

1
cp [オプション] コピー元 コピー先

コピー元には複数ファイルを指定できます。その場合、コピー先はディレクトリである必要があります。

主なオプション

オプション 説明
-i 上書き前に確認(interactive)
-r, -R ディレクトリを再帰的にコピー
-p 属性(タイムスタンプ・権限)を保持
-a アーカイブモード(-pdrと同等)
-u 新しいファイルのみコピー(update)
-v 詳細表示(verbose)
-n 既存ファイルを上書きしない
-l ハードリンクを作成
-s シンボリックリンクを作成

使用例

例1: 基本的なファイルコピー

1
cp file1.txt file2.txt

実行結果:

1
(コマンド成功時は何も表示されない)

file1.txtfile2.txtという名前でコピーします。最もシンプルな使い方です。

例2: 別の名前でコピー

1
cp document.txt document_backup.txt

実行結果:

1
(成功時は何も表示されない)

違う名前でコピーを作成します。

例3: 別ディレクトリにコピー

1
cp file.txt /home/user/backup/

実行結果:

1
(成功時は何も表示されない)

file.txt/home/user/backup/ディレクトリにコピーします。

例4: 複数ファイルを一度にコピー

1
cp file1.txt file2.txt file3.txt /backup/

実行結果:

1
(成功時は何も表示されない)

3つのファイルを/backup/ディレクトリにまとめてコピーします。

例5: ディレクトリを再帰的にコピー

1
cp -r folder1 folder2

実行結果:

1
(成功時は何も表示されない)

folder1を中身ごとすべてfolder2にコピーします。

例6: 確認付きでコピー(-i)

1
cp -i source.txt destination.txt

実行結果:

1
cp: overwrite 'destination.txt'?

destination.txtが既に存在する場合、確認してくれます。上書きする場合はy、キャンセルする場合はnを押します。

例7: 属性を保持してコピー(-p)

1
cp -p original.txt copy.txt

実行結果:

1
(成功時は何も表示されない)

タイムスタンプ、権限、所有者情報を保持したままコピーします。

例8: アーカイブモード(-a)

1
cp -a /var/www/project /backup/project

実行結果:

1
(成功時は何も表示されない)

ディレクトリ全体をすべての属性を保持したままコピーします。バックアップに最適。-a-dprと同等です。

例9: 詳細表示(-v)

1
cp -v file1.txt file2.txt file3.txt /backup/

実行結果:

1
2
3
'file1.txt' -> '/backup/file1.txt'
'file2.txt' -> '/backup/file2.txt'
'file3.txt' -> '/backup/file3.txt'

どのファイルをコピーしているか表示してくれます。大量のファイルをコピーする時に便利。

例10: ワイルドカードを使ったコピー

1
cp *.txt /backup/

実行結果:

1
(成功時は何も表示されない)

すべての.txtファイルをバックアップディレクトリにコピーします。

例11: 更新されたファイルのみコピー(-u)

1
cp -u source/* destination/

実行結果:

1
(成功時は何も表示されない)

コピー先より新しいファイルだけをコピーします。同期に便利ですね。

例12: 番号付きバックアップを作成

1
cp --backup=numbered file.txt file.txt

実行結果:

1
2
3
(成功時は何も表示されない)
ls
file.txt  file.txt.~1~

ファイルが存在する場合、番号付きのバックアップを作成します。

Tips・注意点

-iオプションで安全にコピー

誤って大事なファイルを上書きしないよう、-iオプションを使うと安全です。

1
cp -i source.txt destination.txt

上書きする前に確認してくれます。初心者にはめっちゃおすすめです!

ディレクトリコピーには-rが必須

1
2
3
4
5
# エラーになる
cp folder1 folder2

# 正しい
cp -r folder1 folder2

ディレクトリをコピーする時は必ず-r(再帰)オプションが必要です。つけないとエラーになりますよ。

末尾のスラッシュに注意

1
2
3
4
5
6
7
8
# folder1自体をdestinationの中にコピー
cp -r folder1 destination/

# folder1の中身をdestinationにコピー
cp -r folder1/ destination/

# または
cp -r folder1/* destination/

スラッシュの有無で挙動が変わることがあります。

エイリアスの設定

1
2
# ~/.bashrcに追加
alias cp='cp -i'

これで常に確認付きでコピーできます。安全性アップ!

同名ファイルへのコピーはエラー

1
2
3
4
5
# これはエラーになる
cp file.txt file.txt

# OK: 違う名前を使う
cp file.txt file_copy.txt

同じ名前にはコピーできません。必ず違う名前を使いましょう。

大量ファイルのコピー

1
2
3
4
5
# 進捗を表示
cp -rv large_directory/ /backup/

# 大規模な操作にはrsyncの方が高速
rsync -av source/ destination/

大量のファイルをコピーする場合は-vで進捗を見るか、rsyncの使用を検討しましょう。

実践的な使い方

設定ファイルのバックアップ

1
cp -p ~/.bashrc ~/.bashrc.backup

設定ファイルを編集する前に、タイムスタンプ付きでバックアップを作ります。-pで元の属性を保持します。

プロジェクトの複製

1
cp -a /var/www/project /var/www/project_backup

Webプロジェクト全体をバックアップ。-aでアーカイブモード(全属性保持+再帰コピー)。

タイムスタンプ付きバックアップ

1
cp -r myproject myproject_$(date +%Y%m%d)

日付付きでプロジェクトをバックアップ。myproject_20251026のような名前になります。

複数サーバーへのデプロイ準備

1
2
3
4
# 各サーバー用の設定ファイルをコピー
cp config.yml config_server1.yml
cp config.yml config_server2.yml
cp config.yml config_server3.yml

ループを使うともっと簡単:

1
2
3
for server in server1 server2 server3; do
    cp config.yml config_${server}.yml
done

スクリプト内での安全なコピー

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash
set -e

SOURCE="/path/to/source"
DEST="/path/to/destination"

if [ -e "$SOURCE" ]; then
    cp -av "$SOURCE" "$DEST"
    echo "コピー完了: $SOURCE -> $DEST"
else
    echo "エラー: $SOURCE が存在しません" >&2
    exit 1
fi

テンプレートファイルの複製

1
2
3
4
5
# テンプレートから新規ファイルを作成
cp template.html new_page.html

# 複数のテンプレートをコピー
cp templates/*.html pages/

シンボリックリンクを保持

1
2
# -aオプションでシンボリックリンクを保持
cp -a linked_dir /backup/

まとめ

cpコマンドのポイント:

  • ファイル・ディレクトリをコピーする基本コマンド
  • -i: 上書き前に確認(超重要!)
  • -r: ディレクトリコピーに必須
  • -p: タイムスタンプと権限を保持
  • -a: アーカイブモード(バックアップに最適)
  • -v: 詳細表示
  • -u: 新しいファイルのみコピー
  • よく使う組み合わせ: cp -av, cp -i, cp -rp

ファイルコピーは基本中の基本。-iオプションを習慣にすると、大事なファイルを守れますよ!