あるフォルダーのすべてのコンテンツを別のフォルダーに置き換える方法


23

フォルダーoldとがありますnew

私は、内のすべての内容を交換したいold/*new/*。これらのフォルダには多くのサブディレクトリが存在する場合があります。

しかし、ファイルが入っていないがnew/*入っているファイルはほとんどないold/*ので、そのままにしておきたい。

Linuxシェルからこれを行うにはどうすればよいですか?

回答:


18

ここでは、rsyncがおそらくより良いオプションです。rsync -a subdir / ./と同じくらい簡単です。より良い解決策については、このunix.stackexchageの回答を確認してください

使用 -fしてcpコマンド

cp -fR /source/files /dest

cpが上書きを抑制する」プロンプト。

cpのエイリアスをオーバーライドするには、単純に引用符で囲むことができます。

 'cp' -rf ./source/* /destination/

詳細については、次のリンクを参照してください。

http://www.wallpaperama.com/forums/cp-command-problems-forcing-overwrite-using-cp-command-t5685.html

http://bytes.com/topic/unix/answers/865372-force-cp-overwrite-existing-directory


23

を使用しrsyncます。ディレクトリを一方向に同期します。したがって、oldからのすべてでフォルダを更新したいnewが、そこにあるものを保持したい場合は、単に使用します:

rsync -avh --dry-run /path/to/new/ /path/to/old/

これは、最初に、転送されるファイルのリストを出力するだけです。その場合:に存在newするものoldを除き、にあるものはすべてにコピーされます。のすべてはoldそのままです。

見た目が良い場合は、--dry-run引数を削除して実際に送信してください。

-avhフラグはちょうど(タイムスタンプを保持します、など)アーカイブモードを有効にし、冗長性と人間が読み取り可能なファイルサイズ。--deleteフラグを指定しない限り、宛先から何も削除されません。詳細man rsyncについては相談してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.