cp -Rオプションでディレクトリを再帰的にコピーする方法!Linux初心者向けガイド
生徒
「Linuxでディレクトリごとコピーしたいんですが、cpコマンドだけじゃエラーになります…どうすればいいんですか?」
先生
「それは-Rオプションが必要ですね。cpはファイル単体のコピーはできますが、フォルダ(ディレクトリ)をコピーするには再帰的な処理が必要です。」
生徒
「再帰的ってなんだか難しそうですが、簡単にできますか?」
先生
「はい、cp -Rと書くだけで、フォルダの中身も全部まとめてコピーできますよ。詳しく説明しますね。」
1. cp -Rとは?
Linuxのcpコマンドに-Rオプションをつけることで、ディレクトリ(フォルダ)を再帰的(さいきてき)にコピーできます。
「再帰的」という言葉は難しく聞こえるかもしれませんが、簡単に言えば「中にあるものすべてを順番にコピーしていく」という意味です。
つまり、フォルダの中のファイルだけでなく、さらにその中にあるサブフォルダやファイルも、全部まとめてコピーすることができます。
2. 基本的な使い方
使い方はとてもシンプルです。コピーしたいディレクトリを指定し、そのままコピー先の場所を指定します。
cp -R コピー元ディレクトリ コピー先
たとえば、「project」フォルダを「backup_project」という名前でコピーしたい場合は、次のように入力します。
cp -R project backup_project
これで、「project」フォルダの中身すべてが「backup_project」にコピーされます。
3. コピー前とコピー後の確認
コピーされたか確認するには、lsコマンドを使ってフォルダの中身を見てみましょう。
ls -l project
drwxr-xr-x 2 user user 4096 9月 15 12:00 file1.txt
drwxr-xr-x 2 user user 4096 9月 15 12:00 file2.txt
cp -R project backup_project
ls -l backup_project
drwxr-xr-x 2 user user 4096 9月 15 12:00 file1.txt
drwxr-xr-x 2 user user 4096 9月 15 12:00 file2.txt
このように、フォルダごとコピーされていることがわかります。
4. よく使うオプションとの組み合わせ
-Rは他のオプションと組み合わせて使うことも多いです。
-v(verbose)… コピー中のファイル名を表示-i(interactive)… 上書き確認をする
たとえば、次のように書くと安心です。
cp -Ri project backup_project
この例では、「project」フォルダをコピーしつつ、既にファイルがある場合は上書き確認してくれます。
5. cp -Rとcp -aの違い
-Rオプションはフォルダを再帰的にコピーしますが、属性(パーミッション・所有者・タイムスタンプ)までは保持しません。
もし完全に同じ状態でコピーしたい場合は、-a(アーカイブ)オプションを使うと良いでしょう。
cp -a project backup_project
-aには-Rの機能も含まれているので、コピー内容が正確に再現されます。
6. ディレクトリの中が空でもコピーされる?
はい、cp -Rでは、たとえ中身が空でもフォルダ自体がちゃんとコピーされます。
たとえば、空の「empty_dir」というディレクトリをコピーすると、次のようになります。
cp -R empty_dir copied_empty_dir
ls copied_empty_dir
(表示なし)
中身はありませんが、空のフォルダ「copied_empty_dir」は作成されています。
7. 標準ユーザーでも使える?root権限は必要?
cp -Rは基本的に一般ユーザーでも自由に使えます。ただし、コピー元やコピー先に対してアクセス権があることが前提です。
もしアクセスできない場合は、ルート権限(管理者権限)が必要になります。その場合は、sudoを使って次のように実行します。
sudo cp -R /etc/sample_config /root/backup_config
まとめ
今回の記事では、Linux初心者がつまずきやすい「ディレクトリのコピー」に関する重要なコマンドである cp -R の仕組みや具体的な使い方、注意すべきポイントまでを幅広く学びました。特に、Linux のディレクトリ構造は階層的であり、その中にあるサブディレクトリやファイルが複雑に入れ子になっていることが多く、単なる cp コマンドのままではコピーできずエラーが発生するケースも多々あります。そこで役に立つのが 再帰的コピー を可能にする -R オプションであり、この機能を理解することで、バックアップ作業やプロジェクトフォルダの複製、構成フォルダをまとめて移動したい場面など、様々な操作をスムーズに行えるようになります。
cp -R の本質は「フォルダの中身をすべて順番にたどりながらコピーする」点にあります。これは単にファイルを一つずつコピーする以上の意味をもち、階層構造そのものを維持してコピーできるため、Linux のディレクトリ運用を習得するうえで欠かせない概念です。また、コピー前とコピー後で内容が一致しているかを確認するために ls -l を併用し、確実にコピーできているかどうかを確認する手順も実務では大変重要です。
さらに、-R オプションは単独で使うだけでなく、-i(上書き確認)や -v(コピー状況の表示)と組み合わせることで、より安全かつ分かりやすいコピー操作が可能になります。上書きされる可能性がある場合は -i を使うことで誤操作を防ぐことができ、初心者のうちは特に意識して使うと安心です。
cp -R と cp -a の違いについても重要な知識です。-R は構造をそのままコピーしますが、属性(パーミッション・所有者・タイムスタンプ)は保持しません。一方、cp -a は属性まで含めて完全にコピーするので、バックアップやシステム構成ファイルの複製など「全く同じ状態」を保つ必要がある場面では非常に役立ちます。このような選び方を理解することで、Linux のコマンド操作において柔軟な判断ができるようになります。
また、cp -R は「空のディレクトリもコピーされる」という性質も持っています。これは一見すると地味ですが、プロジェクトの初期構造を複製したい場合など、多くの現場で意外と重宝されるポイントです。空のフォルダが意図した通り複製されるかどうかは、プロジェクトの安定運用にもかかわる大切な確認項目です。
一般ユーザーでの利用についても触れましたが、コピー元・コピー先の権限がある場合は通常どおり使えるものの、アクセス制限されたフォルダを扱う場合は root 権限が必要になります。その際は sudo をつけて実行しますが、root 権限は非常に強力で誤操作が大きなトラブルにつながるため、慎重な操作が求められます。
これらの理解をふまえて、実際のコピー操作例を以下に再掲しておきます。
cp -R project backup_project
また、上書きの確認をしながらコピーしたい場合は次のようにします。
cp -Ri project backup_project
そして、属性ごと完全コピーしたい場合は次のコマンドが便利です。
cp -a project backup_project
Linux のディレクトリ操作は慣れるまで難しく感じられますが、基本の動作をひとつひとつ丁寧に理解していくことで、誰でも自在に扱えるようになります。特に、cp -R の操作はシステム保守、バックアップ、開発作業など幅広い場面で役立つため、繰り返し練習して確実に使いこなせるようになることが大切です。
生徒
「先生、今日の内容で cp -R がどうして必要なのかがやっとわかりました! 普通の cp ではフォルダがコピーできない理由も理解できました。」
先生
「そうだね。Linux のフォルダ構造は階層的だから、再帰的に中身をたどる仕組みが必要なんだ。cp -R を覚えれば大半のコピー操作はこなせるようになるよ。」
生徒
「それに cp -a と比較すると、目的に合わせた使い分けもできるとわかって、自分でもコマンドを選べそうです!」
先生
「その通り。状況に応じて最適なオプションを選べるようになると、Linux の操作が一気に楽になるよ。」
生徒
「空のフォルダもコピーできるっていうのは意外でした。プロジェクトの構成をそのまま複製したいときに便利ですね!」
先生
「うん、それも cp -R を使う大きなメリットのひとつだね。これから実際の作業でもどんどん使って慣れていくといいよ。」