rsync はターゲットから重複行を削除します。

rsync はターゲットから重複行を削除します。

まず、私のディレクトリ構造について以下に詳しく説明します。

src
   1
     1_1.txt
        test_line1
     1_2.txt
        test_line1
   2
     2_1.txt
        test_line1
     2_2.txt
        test_line1

このディレクトリをディレクトリsrcと同期します。dstこれで、ディレクトリは次のコマンドを使用するのと同じですdstsrcrsync

rsync -av src/* dst/

素晴らしい。ディレクトリ内のファイルに行を追加すると、src同じコマンドがそのディレクトリの変更をコピーしますdst

1_2.txt目次にテキスト行を追加しますdst。この場合srcdstディレクトリは同じではありません。

上記のコマンドを実行すると、rsyncディレクトリ内の対応するファイルから追加の行が削除されるようですdst。しかし、それは起こりませんでした。

  1. srcファイルとディレクトリを同じに保つにはどうすればよいですかdst

  2. ディレクトリに新しいディレクトリ/ファイルを手動で追加すると、コマンドを実行するdstとディレクトリ/ファイルを削除するように求められますrsync。どうすればいいですか?

答え1

私はあなたが見たのと同じ行動を再現できません:

$ tree
.
|-- d
|   `-- file
`-- s
    `-- file

2 directories, 2 files
$ cat s/file
hello
$ rsync -av s/ d
sending incremental file list

sent 63 bytes  received 12 bytes  150.00 bytes/sec
total size is 6  speedup is 0.08

データは転送されず、両方のファイルはすでに同じです。

$ echo world >>d/file
$ cat d/file
hello
world
$ rsync -av s/ d
sending incremental file list
file

sent 116 bytes  received 35 bytes  302.00 bytes/sec
total size is 6  speedup is 0.04
$ cat d/file
hello

これは、ターゲットディレクトリのファイルに追加された行が再度実行されると削除されることを示しますrsync -a


ソースディレクトリで利用できないターゲットのファイルを削除するには、次の手順を使用します--delete

$ tree
.
|-- d
|   |-- extra_file
|   `-- file
`-- s
    `-- file

2 directories, 3 files
$ rsync -av --delete s/ d
sending incremental file list
deleting extra_file
./

sent 66 bytes  received 29 bytes  190.00 bytes/sec
total size is 6  speedup is 0.06
$ tree
.
|-- d
|   `-- file
`-- s
    `-- file

2 directories, 2 files

このrsyncユーティリティは、ターゲットからファイルを削除する前の対話型確認メッセージをデフォルトではサポートしません。ただし、最初に実行して--dry-run実際にコピーを実行すると、何が起こるのかを確認できます。


rsync -av s/* dまた、代わりに使用すると、rsync -av s/ dソースディレクトリの隠しファイルやディレクトリはコピーされません。これは*、デフォルトでは、globパターンが隠しファイル名に拡張されないためです。ただし、ソースディレクトリのサブディレクトリにある隠しファイルは引き続きコピーされます。

関連情報