Unix:2つのディレクトリをマージする方法


17

さまざまなコンテンツを含む2つのフォルダーがあるfooとしbarます。次のようにマージbarするにはどうすればよいですfooか:

  • fooないファイルbarは変更されません。
  • barないファイルはfooにありfooます。
  • にあるファイルfoobarからのファイルに置き換えられていますbar

回答:


25

要件を正しく読んでいる場合、からfooに移動するファイルはありませんbarbarto の内容をコピーするだけでfoo、必要に応じてファイルを上書きできるように見えます(デフォルトの動作)。

$ cp -R /path/to/bar/* /path/to/foo

ええ、私が不確かだったのは、再帰性と、fooの中にbarをfoo / barとして持つだけで終わらない方法でした。しかし、これは:)私が欲しいもののようです
Svish

1
あなただけやった場合は右、cp -R /path/to/bar /path/to/fooそれはディレクトリ作成しbar内部をfoo。微妙な点。
coneslayer

1
注:シェルグロビングの仕組みによりbar、隠しファイル/ディレクトリ(つまり、ドットで始まる名前– .)は省略されます。
カミルマシオロウスキ

9

私は非常に似たニーズがありました:にマージbarfooますが、にbar あるファイルはの一致するファイルを上書きしないくださいfoo。この場合:

$ cp -R -n /path/to/bar/* /path/to/foo/

1

これを試して :

$ cp -r-u-v /path/to/foo/* /path/to/bar/

SOURCEファイルが宛先ファイルよりも新しい場合、または宛先ファイルが欠落している場合にのみman cp
-u、-updateコピーから
-R、-r、-recursiveディレクトリーを再帰的にコピーします


1
二人がすでにcpコマンドを提案しているので、あなたの答えは無駄に思えます。選択した引数が他の提案よりも良い仕事をする方法を説明するために数分かかると、答えがより役立つようになります。
music2myear

1
-uフラグは、ソースのファイルが宛先のファイルよりも新しい場合にのみ更新されます。参照:man cp -> -u、-update:コピー元ファイルがコピー先ファイルよりも新しい場合、またはコピー先ファイルが見つからない場合にのみコピー
-drew7721

その情報を質問に追加して(投稿のすぐ下にある[編集]を使用)、回答自体に役立つ情報を表示できるようにします。
music2myear
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.