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

StackOverflow https://stackoverflow.com/questions/601247

質問

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

2つのフォルダーがあります:

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

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

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

次のオプションを使用して、エクスポートのすべてのコンテンツとwebrootをマージします:

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

cpについて少し調査しました。これでうまくいきますか?:

cp -pruf ./export /path/to/webroot
役に立ちましたか?

解決

それは可能ですが、 export webroot の対応するファイルのコンテンツが同じで修正時間が異なる場合は、不要なコピー操作を実行することになります。あなたはおそらく rsync からわずかに賢い振る舞いを得るでしょう:

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

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

編集:権限を保持することの意味についての明確化に関して: -p オプションは省略した方がよいでしょう。

他のヒント

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

つまり、cpのすべての正しい引数を取得したように見えます

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top