いくつかのフォーラムソフトウェアを更新し、CLIを使用して学習可能性でアップグレードプロセスをテストしたいと思います。
あるフォルダの内容を別のフォルダにマージしてファイルを置き換える方法は?
答え1
rsync
これを行うには、次の方法を使用できます。
$ rsync -abviuzP src/ dest/
-a
アーカイブモードは-rlptgoDと同じです(-H、-A、-Xを除く)。-i
デフォルト形式よりも多くの情報を表示する項目固有の形式をオンにします。-b
両方のフォルダに存在するrsyncバックアップファイルを作成し、古いファイルに〜を追加します。 --suffix .sufを使用してこのサフィックスを制御できます。-u
rsync転送がsrcのファイルよりも最新のdestのファイルをスキップするようにします。-z
低速リンクで簡単に圧縮できるファイルを転送するときに便利な圧縮をオンにします。-P
--partial および --progress を有効にする--partial
転送が中断された場合は、rsyncに部分的に転送されたファイルを保持させます。--progress
各転送の進行状況バーを表示し、大容量ファイルを転送する場合に便利です。
私はこれらのスイッチのいくつかを廃棄する予定ですが、これは単に起動を支援するためのものです。次のようなものを使用できます。
$ rsync -abuP src/ dest/
正常に見える場合は、次のコマンドを実行してバックアップファイルを削除できます。
$ find dest/ -name "*.~" -delete
はい
次のサンプルデータがあるとします。
生データ
次のコマンドを使用して偽データを生成します。
$ seq 10 | xargs -I{} -- mkdir dest/dir{}
$ for i in $(seq 5); do echo "$i" > dest/dir$i/file$i;done
偽のデータは次のとおりです。
$ tree -DsifvF --noreport dest/
dest
[ 4096 Aug 29 22:21] dest/dir1/
[ 2 Aug 29 22:21] dest/dir1/file1
[ 4096 Aug 29 22:21] dest/dir2/
[ 2 Aug 29 22:21] dest/dir2/file2
[ 4096 Aug 29 22:21] dest/dir3/
[ 2 Aug 29 22:21] dest/dir3/file3
[ 4096 Aug 29 22:21] dest/dir4/
[ 2 Aug 29 22:21] dest/dir4/file4
[ 4096 Aug 29 22:21] dest/dir5/
[ 2 Aug 29 22:21] dest/dir5/file5
新しいデータ
それでは、元のデータ(dest/*
- > src/
)をコピーし、いくつかの最新のファイルを追加します。これは「新しいバージョン」をシミュレートします。
$ cp -pr dest/* src/
$ mkdir src/dir11
$ for i in 1 3 5 11; do echo "$i$i" > src/dir$i/file$i;done
偽のデータは次のとおりです。
$ tree -DsifvF --noreport src/
src
[ 4096 Aug 29 22:21] src/dir1/
[ 3 Aug 29 23:00] src/dir1/file1
[ 4096 Aug 29 22:21] src/dir2/
[ 2 Aug 29 22:21] src/dir2/file2
[ 4096 Aug 29 22:21] src/dir3/
[ 3 Aug 29 23:00] src/dir3/file3
[ 4096 Aug 29 22:21] src/dir4/
[ 2 Aug 29 22:21] src/dir4/file4
[ 4096 Aug 29 22:21] src/dir5/
[ 3 Aug 29 23:00] src/dir5/file5
[ 4096 Aug 29 23:00] src/dir11/
[ 5 Aug 29 23:00] src/dir11/file11
src/をdest/にマージ
これは新しいソフトウェアツリーを設定しsrc/
、既存のディレクトリにマージしたい状況を模倣しますdest/
。
$ rsync -abuP src/ dest/
sending incremental file list
dir1/file1
3 100% 0.00kB/s 0:00:00 (xfer#1, to-check=5/13)
dir11/
dir11/file11
5 100% 4.88kB/s 0:00:00 (xfer#2, to-check=4/13)
dir3/file3
3 100% 2.93kB/s 0:00:00 (xfer#3, to-check=2/13)
dir5/file5
3 100% 2.93kB/s 0:00:00 (xfer#4, to-check=0/13)
sent 416 bytes received 97 bytes 1026.00 bytes/sec
total size is 18 speedup is 0.04
ご覧のとおり、file1、file3、file5、および新しく追加されたdir11 + file11ファイルが更新されました。
rsync
確認の結果、次のバックアップファイルが見つかったことを確認できますdest/
。
$ find dest/ | grep "~"
dest/dir3/file3~
dest/dir1/file1~
dest/dir5/file5~
答え2
cp -r name_of_the_folder/* name_of_the_destination_folder を使用できます。ここで、アスタリスク(*)はすべてのファイルを表し、-rは再帰コピーを表します。
コンテンツを上書きするかどうかを尋ねる-iオプションを使用することもできます。