このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】ファイルのコピー:cpコマンド

cpコマンドの概要

 「cp」コマンドは、LinuxやUnixシステム上でファイルやディレクトリをコピーするためのコマンドです。「cp」は「copy」の略で、指定されたファイルやディレクトリを別の場所に複製します。

基本的な構文は以下の通りです。

cp [オプション] [ソース] [ディレクトリまたはファイル]

 ここで、[ソース] はコピー元のファイルやディレクトリを指し、[ディレクトリまたはファイル] はコピー先を指します。

例えば、以下のように使います。

cp file1.txt /path/to/directory

 この例では、「file1.txt」という名前のファイルを「/path/to/directory」というディレクトリにコピーします。

主なオプションと説明

オプション説明
-iコピー先に同名のファイルが存在する場合に確認を求めます。
-fコピー先に同名のファイルが存在する場合でも強制的に上書きします。
-r, -Rディレクトリを再帰的にコピーします。ディレクトリ内のファイルやサブディレクトリもすべてコピーされます。 -Rは大文字でも使えます。
-p元のファイルの属性(パーミッション、タイムスタンプなど)を保持してコピーします。
主なオプションと説明

cpコマンドの使用例と解説

1.ディレクトリパスを指定したコピー

コピー先ファイルのファイル名は、コピー先の指定の仕方によって変わってきます。

 コピー先として、ディレクトリパスを指定する場合、コピー先のディレクトリにコピー元と同じファイル名でコピーされます。

まず、「dir」ディレクトリと「file1.txt」を作成しておきます。

・「mkdir dir」コマンドと「touch file1.txt」コマンドを実行します。

user01@ubuntu-vm:~$ mkdir dir
user01@ubuntu-vm:~$ touch file1.txt

・「cp file1.txt dir」コマンドを実行します。

このコマンドは、「file1.txt」という名前のファイルを「dir」というディレクトリ内にコピーします。

user01@ubuntu-vm:~$ cp file1.txt dir

コピーしたファイルを確認します。

・「ls dir」コマンドを実行します。

「dir」ディレクトリに「file1.txt」がコピーされていることが確認できます。

user01@ubuntu-vm:~$ ls dir
file1.txt

2.ファイルパスを指定したコピー

ファイルパスを指定した場合は、指定したファイル名でコピーされます。

・「cp file1.txt dir/file2.txt」コマンドを実行します。

 このコマンドは、「file1.txt」という名前のファイルを「dir」というディレクトリに「file2.txt」という名前のファイルとしてコピーします。

user01@ubuntu-vm:~$ cp file1.txt dir/file2.txt

コピーしたファイルを確認します。

・「ls dir」コマンドを実行します。

「dir」ディレクトリに「file2.txt」がコピーされていることが確認できます。

user01@ubuntu-vm:~$ ls dir
file1.txt  file2.txt

3.コピー先に同名のファイルが存在する場合に確認を求める場合

・「cp -i file1.txt dir」コマンドを実行します。

 このコマンドは、「-i」オプションを指定しています。「file1.txt」という名前のファイルを「dir」というディレクトリにコピーします。もし同名のファイルが既に存在する場合には、上書きするかどうか確認を求めます。

ここでは、「n」と入力します。

user01@ubuntu-vm:~$ cp -i file1.txt dir
cp: 'dir/file1.txt' を上書きしますか? n

4.コピー先に同名のファイルが存在する場合でも強制的に上書きする場合

・「cp -f file1.txt dir」コマンドを実行します。

 このコマンドは、「-f」オプションを指定しています。「file1.txt」という名前のファイルを「dir」というディレクトリにコピーします。同名のファイルが既に存在する場合でも、強制的に上書きします。

user01@ubuntu-vm:~$ cp -f file1.txt dir

5.ディレクトリを再帰的にコピーする場合

「dir」ディレクトリ内に「dir1」ディレクトリを作成します。

・「mkdir dir/dir1」コマンドを実行します。

user01@ubuntu-vm:~$ mkdir dir/dir1

・「cp -r dir dir2」コマンドを実行して、「ls dir2」コマンドを実行します。

 このコマンドは、「-r」オプションを指定しています。「dir」という名前のディレクトリを「dir2」というディレクトリに再帰的にコピーします。つまり、「dir」内のファイルやサブディレクトリもすべてコピーされます。

user01@ubuntu-vm:~$ ls dir2
dir1  file1.txt  file2.txt

6.元のファイルの属性を保持してコピーする場合

・「cp file1.txt file3.txt」コマンドを実行して、「ls -l file*」コマンドを実行します。

「file1.txt」とコピーした「file3.txt」の更新日時が異なります。

user01@ubuntu-vm:~$ ls -l file*
-rw-rw-r-- 1 user01 user01 0  5月 11 13:05 file1.txt
-rw-rw-r-- 1 user01 user01 0  5月 11 15:28 file3.txt

・「cp -p file1.txt file4.txt」コマンドを実行して、「ls -l file*」コマンドを実行します。

 このコマンドは、「-p」オプションを指定しています。「file1.txt」という名前のファイルを"「file4.txt」というファイル名でコピーします。同時に、元のファイルの属性(パーミッションや更新日時)も保持されます。

「file1.txt」とコピーした「file4.txt」の更新日時が同じです。

user01@ubuntu-vm:~$ ls -l file*
-rw-rw-r-- 1 user01 user01 0  5月 11 13:05 file1.txt
-rw-rw-r-- 1 user01 user01 0  5月 11 15:28 file3.txt
-rw-rw-r-- 1 user01 user01 0  5月 11 13:05 file4.txt

作成したファイルとディレクトリを削除します。

・「rm -r file* dir dir2」コマンドを実行して、「ls 」コマンドで削除されたかを確認します。

user01@ubuntu-vm:~$ rm -r file* dir dir2
user01@ubuntu-vm:~$ ls
snap          テンプレート  ドキュメント  ピクチャ      公開
ダウンロード  デスクトップ  ビデオ        ミュージック

 「cp」コマンドは、これらのオプションを使って様々な用途に応じたファイルやディレクトリのコピーが可能です。