CLIを使用したフォルダのマージとファイルの置き換え

CLIを使用したフォルダのマージとファイルの置き換え

いくつかのフォーラムソフトウェアを更新し、CLIを使用して学習可能性でアップグレードプロセスをテストしたいと思います。

あるフォルダの内容を別のフォルダにマージしてファイルを置き換える方法は?

ベストアンサー1

rsyncこれを行うには、次の方法を使用できます。

$ rsync -abviuzP src/ dest/
  • -aアーカイブモードは-rlptgoDと同じです(-H、-A、-Xを除く)。
  • -iデフォルト形式よりも多くの情報を表示する項目固有の形式をオンにします。
  • -b両方のフォルダに存在するrsyncバックアップファイルを作成し、古いファイルに〜を追加します。 --suffix .sufを使用してこのサフィックスを制御できます。
  • -ursync転送が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~

おすすめ記事