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が再現されます。
多くのサブディレクトリを含むプロジェクトなどでも、個別にフォルダ構成を壊さずにコピーできるので、整理されたバックアップにも役立ちます。