あまり使う機会はないかもしれませんが、「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
コメント
parentsの綴りが誤っているようです。
> parentsの綴りが誤っているようです。
ご指摘ありがとうございます!
修正させていただきました。