cp –parentsでフォルダ構造(パス)まるごとコピー

あまり使う機会はないかもしれませんが、「cp」で指定したデータのみフォルダ構造ごとコピーする方法です。

「parents」オプションでまるごとコピー

「cp」コマンドでデータをコピーする際に「–parents」オプションを使用すること、ディレクトリ構造(パス)ごとコピーをすることが出来ます。

cp --parnents コピー元 コピー先
cp --parents コピー元 コピー先

※2019.11.27 parentsの綴りが間違っていたので修正しました。

下記のようなディレクトリ構造の「work/data/user.txt」ファイルをコピーする場合、通常の方法であれば「user.txt」のみがコピーされますが、「–parents」オプションを使用することで、「work/data/user.txt」といったように途中のディレクトリ付きでコピーすることが出来ます。

$ tree --charset=C work
work
|-- data
|   |-- list.txt
|   |-- number.txt
|   `-- user.txt
`-- logs
    `-- access.log

2 directories, 4 files

「–parents」の使用例

「–parents」オプションの使用例として「work/data/user.txt」を「test」ディレクトリにコピーをしてみます。

$ mkdir test
$ cp --parents -v work/data/user.txt test
work -> test/work
work/data -> test/work/data
‘work/data/user.txt’ -> ‘test/work/data/user.txt’

「ls -R」コマンドで「test」フォルダを確認すると、途中の「work」「data」といったディレクトリ構造ごと「test」ディレクトリにコピー出来ていることが確認できました。

$ ls -R test
test:
work

test/work:
data

test/work/data:
user.txt

「–parents」 オプション無の場合

「–parents」 オプションを使用せずに「cp」のみでコピーを行った場合は、指定した「user.txt」ファイルのみ「test」ディレクトリにコピーされてしまいます。

$ cp -pv  work/data/user.txt test
‘work/data/user.txt’ -> ‘test/user.txt’

「test」ディレクトリの直下に「user.txt」コピーされています。

$ ls test
user.txt

「-R」オプションを使用した場合

「-R」オプションでworkディレクトリをまるっとコピーすると、ディレクトリ構造は当然コピーされますが、必要のないデータまでコピーされてしまいます。

$ cp -Rpv work/ test
‘work/’ -> ‘test/work’
‘work/logs’ -> ‘test/work/logs’
‘work/logs/access.log’ -> ‘test/work/logs/access.log’
‘work/data’ -> ‘test/work/data’
‘work/data/user.txt’ -> ‘test/work/data/user.txt’
‘work/data/number.txt’ -> ‘test/work/data/number.txt’
‘work/data/list.txt’ -> ‘test/work/data/list.txt’

「ls -R」コマンドで「test」フォルダの中身を確認してみると、当然ですが「work」ディレクトリ中身すべてがコピーされています。

$ ls -R test
test:
work

test/work:
data  logs

test/work/data:
list.txt  number.txt  user.txt

test/work/logs:
access.log

シェアする

『cp –parentsでフォルダ構造(パス)まるごとコピー』へのコメント

  1. 名前: 投稿日:2019/11/27(水) 17:31:08 ID:f20ca01d1 返信

    parentsの綴りが誤っているようです。

    • 名前:tamohiko 投稿日:2019/11/27(水) 23:55:05 ID:dbef73862 返信

      > parentsの綴りが誤っているようです。

      ご指摘ありがとうございます!
      修正させていただきました。