Linuxコマンド

linuxでディレクトリ丸ごとコピーをcpではなくtarで

More than 1 year has passed since last update.

結論から

(cd /home/projects/wp && tar cf - site1) | (cd /home/backup && tar xvf -)
/home/projects/wp/site1というディレクトリを/home/backup/site1という形に
コピーしたい場合上記のように書くといいとの情報があったのでメモしておきます。

理由(個人の解釈)

cpコマンドはコピーをするコマンド
tarコマンドは圧縮、展開するコマンド
正確にはアーカイブを作成、つまりファイルをまとめるという意味かなと個人的には解釈しました。

上記はsite1というディレクトリを圧縮しディレクトリを移動して展開するという流れ。

情報元に理由は書いてなかったのですが個人的な予想としては
cp -aなどの実行時に状況によってパーミッションが変わるなどの場合が発生するため
tarで圧縮解凍したほうが確実という意味合いなのでは?
(ほかのメリットなどありましたらぜひコメントお願いいたしますm(_)m)

また&&の部分は以下のように書くことも可能なのですが
(cd /home/projects/wp; tar cf - site1) | (cd /home/backup; tar xvf -)
&&にすることでcdを間違えて指定した場合にtarが実行されるのを防いでくれるとのこと。

cpコマンドのおさらい(自分がよく使うポイントだけまとめ)

cp -a は cp -dpRと同じ。
オプション解説すると
dはリンクを保持する(シンボリックリンク、ハードリンク共に)
pは可能なら属性をコピーする。可能ならというところが味噌ですな。
この辺りの一つの解決方法としてのtarなのかなと個人的には解釈しました。

つっこみありましたらぜひお願いいたします

cpコマンドもうまく使う方法あるよ。
tarだとリスクがあるよなどなど
突っ込むポイントありましたら是非コメントお願いいたします。