まず、私のディレクトリ構造について以下に詳しく説明します。
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
これで、ディレクトリは次のコマンドを使用するのと同じですdst
。src
rsync
rsync -av src/* dst/
素晴らしい。ディレクトリ内のファイルに行を追加すると、src
同じコマンドがそのディレクトリの変更をコピーしますdst
。
1_2.txt
目次にテキスト行を追加しますdst
。この場合src
とdst
ディレクトリは同じではありません。
上記のコマンドを実行すると、rsync
ディレクトリ内の対応するファイルから追加の行が削除されるようですdst
。しかし、それは起こりませんでした。
src
ファイルとディレクトリを同じに保つにはどうすればよいですかdst
?ディレクトリに新しいディレクトリ/ファイルを手動で追加すると、コマンドを実行する
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パターンが隠しファイル名に拡張されないためです。ただし、ソースディレクトリのサブディレクトリにある隠しファイルは引き続きコピーされます。