SOFTELメモ

Softel Inc.

【Linux】 2つのディレクトリをマージしたい(rsync方式)

問題

2つのディレクトリをマージしたいんですけど、そんなコマンドないんですか。

例)バックアップから復元したディレクトリ(A)と、今稼働しているディレクトリ(B)を合わせて1つにしたい。Aに存在するファイルで、Bに存在しないファイルは追加したい。Aに存在するファイルで、Bに存在するファイルは上書きしたい。Aに存在しないファイルで、Bに存在するファイルはそのまま残したい。

merge-directories

答え

rsync がお手軽。

aaa と bbb があるとする。

# find .
.
./bbb
./bbb/bbb
./bbb/bbb/3.txt
./bbb/bbb/2.txt
./bbb/aaa
./bbb/aaa/3.txt
./bbb/aaa/1.txt
./aaa
./aaa/bbb
./aaa/bbb/1.txt
./aaa/bbb/2.txt
./aaa/aaa
./aaa/aaa/1.txt
./aaa/aaa/2.txt

ディレクトリ aaa/ を ディレクトリ bbb にマージ。

# rsync -a aaa/ bbb

結果、aaaにあったファイルがbbbに追加された。

# find .
.
./bbb
./bbb/bbb
./bbb/bbb/3.txt
./bbb/bbb/1.txt
./bbb/bbb/2.txt
./bbb/aaa
./bbb/aaa/3.txt
./bbb/aaa/1.txt
./bbb/aaa/2.txt
./aaa
./aaa/bbb
./aaa/bbb/1.txt
./aaa/bbb/2.txt
./aaa/aaa
./aaa/aaa/1.txt
./aaa/aaa/2.txt

メモ

cpコマンドのバージョンが新しいと以下のようなことができる。

cp [OPTION]... [-T] SOURCE DEST

CentOS6のcpコマンド(バージョン5)では、この -T オプションはない。需要は多そうなのに、ちょっと前まで実装されていなかった機能のようだ。

関連するメモ

コメント