cp --parentsオプションの使い方|ディレクトリ構造を保持してコピーする方法を完全解説!
生徒
「Linuxでファイルをコピーするとき、フォルダの構造ごとコピーしたいんですけど、うまくいきません……」
先生
「それなら、cpコマンドの--parentsオプションを使うと便利ですよ。ディレクトリ構造をそのまま保ってコピーできます。」
生徒
「えっ!?普通にコピーするのとは違うんですか?」
先生
「そうなんです。普通のコピーではディレクトリ構造は無視されますが、--parentsを使えば元のパスを再現したままコピーされるんです。具体例を見てみましょう!」
1. cpコマンドの基本をおさらい
cpコマンドは、Linuxでファイルやディレクトリをコピーするときに使う、基本的なコマンドです。
例えば、次のように使えばファイルをコピーできます。
cp file.txt /home/user/backup/
この場合、単純にfile.txtだけがコピーされます。もしfile.txtがサブディレクトリ内にあっても、そのディレクトリ構造まではコピーされません。
2. --parentsオプションとは?
--parentsオプションを付けると、コピー元のディレクトリ構造をそのままコピー先に再現できます。
「フォルダの中にあるファイルを、同じフォルダ構造ごと別の場所に保存したい」というときに非常に便利です。
たとえば、次のような構成があるとします。
project/doc/manual.txt
これを単にコピーするとこうなります。
cp project/doc/manual.txt /tmp/
すると/tmpの中にはファイルだけが入ります。project/doc/というフォルダ構造は消えてしまいます。
ですが、--parentsを使えば、以下のようにフォルダ構造も含めてコピーされます。
cp --parents project/doc/manual.txt /tmp/
この結果、/tmp/project/doc/manual.txt という形で保存されます。
3. 実際に試してみよう!
まず、ディレクトリとファイルを作ってみましょう。
mkdir -p sample/notes
echo "メモの内容" > sample/notes/todo.txt
その後、/tmpに構造ごとコピーします。
cp --parents sample/notes/todo.txt /tmp/
コピー後に確認してみましょう。
ls /tmp/sample/notes/
todo.txt
このように、元のフォルダ階層がそのまま再現されています!
4. よくある失敗例と注意点
--parentsは絶対パスではなく、指定したパスの中で相対的な部分だけを保持します。
つまり、次のような絶対パスを使っても……
cp --parents /home/user/sample/notes/todo.txt /tmp/
この場合は、/tmp/home/user/sample/notes/todo.txtのようになってしまうので注意が必要です。
基本的には、現在のディレクトリ(カレントディレクトリ)からの相対パスで指定するのが理想です。
5. -rや-pオプションと組み合わせて便利に使おう
cpには他にも便利なオプションがあります。--parentsとよく一緒に使われるのが以下の2つです。
-r(再帰的にコピー)-p(タイムスタンプや権限も維持)
例えば、ディレクトリごとコピーして、しかも構造と属性を保持したいときは以下のようにします。
cp -rp --parents sample/notes /tmp/
このコマンドで、sample/notesディレクトリ全体が、時間情報やパーミッションもそのままに、構造ごと/tmp/にコピーされます。
6. rsyncコマンドとの違い
Linuxでファイルやフォルダをコピーする方法はcp以外にもあります。代表的なのがrsyncです。
rsyncは、差分コピーやリモート転送にも対応しており、多機能なコマンドです。ただし、初心者には少し難しい面もあります。
cp --parentsは「簡単にディレクトリ構造を再現してコピーしたい」ときにとても便利なので、初学者にはcpの方がわかりやすく安全です。
7. 応用:複数ファイルをまとめてコピーする
複数のファイルをそれぞれのパス構造を保ったままコピーすることも可能です。
cp --parents dir1/file1.txt dir2/file2.txt /tmp/
このようにすれば、/tmp/dir1/file1.txtと/tmp/dir2/file2.txtが再現されます。
多くのサブディレクトリを含むプロジェクトなどでも、個別にフォルダ構成を壊さずにコピーできるので、整理されたバックアップにも役立ちます。
まとめ
cpコマンドとparentsオプションの重要ポイント
今回はLinuxの基本コマンドであるcpコマンドの中でも、ディレクトリ構造を維持してコピーできるparentsオプションについて詳しく解説しました。 通常のコピー操作ではファイル単体だけがコピーされるため、元のフォルダ構成が失われてしまうことがよくあります。 しかしparentsオプションを活用することで、元のパス構造をそのまま再現できるため、バックアップや構成管理の効率が大きく向上します。
特に複雑なディレクトリ構造を持つプロジェクトや、ログファイルの整理、設定ファイルの保管などにおいては非常に有効です。 システム管理者だけでなく、初心者の方でも簡単に扱えるため、Linux操作のスキルアップにもつながります。
実務で役立つ使い方の整理
実際の現場では、単純なコピーよりも構造を維持したコピーが求められるケースが多くあります。 例えばログ収集や設定ファイルのバックアップ、特定ファイルのみの抽出コピーなどが代表的です。 そのような場面ではparentsオプションが非常に役立ちます。
cp --parents logs/app/error.log /backup/
backup/logs/app/error.log
このように元のディレクトリ構造をそのまま維持した状態でコピーされるため、後からファイルの場所を把握しやすくなります。 特に大規模なシステムでは、ファイルの位置情報が非常に重要になるため、この機能は欠かせません。
オプションの組み合わせでさらに便利に
parentsオプションは単体でも便利ですが、他のオプションと組み合わせることでさらに強力になります。 再帰コピーを行うrオプションや、属性を保持するpオプションと併用することで、より実践的な運用が可能になります。
cp -rp --parents project/config /backup/
backup/project/config
このようにディレクトリ全体を構造ごとコピーしつつ、権限やタイムスタンプも維持できます。 サーバ移行や環境複製などでも活躍する重要なテクニックです。
よくあるミスと対策
初心者がつまずきやすいポイントとして、絶対パスの扱いがあります。 絶対パスをそのまま指定すると、不要な階層までコピーされてしまうことがあります。 そのため基本的には相対パスを利用することが推奨されます。
cp --parents ./data/file.txt /tmp/
tmp/data/file.txt
このように現在のディレクトリを基準にしたパス指定を行うことで、意図しない階層のコピーを防ぐことができます。
まとめのポイント整理
- cpコマンドはLinuxで最も基本的なコピーコマンド
- parentsオプションでディレクトリ構造を維持できる
- 相対パスを使うことで安全に操作できる
- rやpオプションと組み合わせると実務で便利
- バックアップや構成管理に最適
生徒
cpコマンドって単純にコピーするだけだと思っていましたが、こんなに便利な使い方があるんですね。 特にフォルダ構造をそのままコピーできるのは驚きでした。
先生
そうですね。parentsオプションは地味ですが、とても実用的です。 特にファイル管理やバックアップの場面では欠かせない機能ですよ。
生徒
これまでコピーしたあとに手動でフォルダを作っていたので、かなり効率が悪かった気がします。
先生
その手間を省けるのがこのオプションの強みです。 しかもコマンド一つで再現できるので、作業ミスも減らせます。
生徒
相対パスで指定するのがポイントなんですね。 絶対パスを使うと余計な階層が増えてしまうのも理解できました。
先生
その理解はとても大事です。 Linuxコマンドは細かい違いで結果が大きく変わるので、こうしたポイントを押さえることでスキルが一気に伸びます。
生徒
rオプションやpオプションと組み合わせると、さらに実務向けになるのも勉強になりました。
先生
その通りです。コマンドは組み合わせて使うことで真価を発揮します。 今回学んだ内容はサーバ管理や開発現場でもそのまま使えるので、ぜひ実際に試してみてください。