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