web-dev-qa-db-ja.com

ディレクトリを別のディレクトリに再帰的にコピーして、変更されていないファイルのみを置き換えるにはどうすればよいですか?

Fedoraで特定のコピーを作成したいと思っています。

私は2つのフォルダを持っています:

  • 'webroot':すべてのWebファイル/画像などを保持します

  • 'export':SVNリポジトリからエクスポートされた何千ものPHP、CSS、JSドキュメントを含むフォルダー。

エクスポートディレクトリには、ルートと同じファイル/フォルダが多数含まれていますが、ルートには、エクスポートにない追加のファイル/フォルダが含まれています。

次のオプションを使用して、エクスポートのすべてのコンテンツをWebルートにマージしたいと思います。

  1. エクスポートのバージョンにwebrootのバージョン(ライブ)内のものとは異なるコードが含まれている場合、webroot内のファイルを上書きする
  2. ファイルが上書きされた場合、ファイルのアクセス許可/ユーザー/グループを保持します(ライブバージョンをエクスポートバージョンに置き換えます)*注webrootsのアクセス許可/所有権を維持したいのですが、エクスポートの内容を使用します
  3. いかなる種類のコピーのプロンプト/停止もありません(つまり、冗長ではありません)
  4. 再帰的コピー-明らかに、エクスポートで見つかったすべての*ファイルフォルダーとサブフォルダーをコピーしたい

私はcpについて少し調査しました-これでうまくいくでしょうか?:

cp -pruf ./export /path/to/webroot
19
barfoon

可能性はありますが、exportwebrootの対応するファイルの内容が同じで、変更時間が異なる場合は常に、不要なコピー操作を実行することになります。おそらくrsyncから少し賢い振る舞いが得られるでしょう:

rsync -pr ./export /path/to/webroot

さらに、rsyncは、SSH接続を介して、あるホストから別のホストにファイルをコピーできます。さらに、動作を微調整するために指定できる無数のオプションがあります。詳細については、manページを参照してください。

[〜#〜] edit [〜#〜]:パーミッションを保持することの意味についての明確化に関して:おそらく-pオプションを省略したいと思うでしょう。

24
David Z
  1. -宛先がソースより古い場合、uは既存のファイルフォルダを上書きします
  2. -pは許可と日付を保持します
  3. -fは冗長性をオフにします
  4. -rはコピーを再帰的にします

Cpに正しい引数をすべて取得したようです

6
hhafez

cpioの仕事のように聞こえます(したがって、おそらくGNU tarでも実行できます):

cd export
find . -print | cpio -pvdm /path/to/webroot

所有者を保存する必要がある場合は、もちろん、ルートとして実行する必要があります。 -pオプションは「パスモード」です。これは場所間のコピーを意味します。 -vは冗長です(ただし、インタラクティブではありません。違いがあります)。 -dは、必要に応じてディレクトリを作成することを意味します。 -mは、変更時間を保持することを意味します。デフォルトでは、-uオプションがないと、cpioは、ソース領域のファイルよりも新しいターゲット領域のファイルを上書きしません。

5