Rsync --delete オプションはターゲット内の隠しドットファイルを削除しません

Rsync --delete オプションはターゲット内の隠しドットファイルを削除しません

私が実行した手順は次のとおりです。

いくつかのテストファイルを作成します。

/tmp $ mkdir src tgt
/tmp $ cd src/
/tmp/src $ touch .test{1,2,3}
/tmp/src $ ls -la
total 0
drwxr-xr-x   5 user  wheel  170 18 Aug 15:02 .
drwxrwxrwt  11 root       wheel  374 18 Aug 15:02 ..
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test1
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test2
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test3

src ディレクトリと tgt ディレクトリを同期します。

/tmp/src $ cd ..
/tmp $ rsync -avh --delete --progress src/.??* tgt
building file list ...
3 files to consider
.test1
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=2/3)
.test2
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=1/3)
.test3
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=0/3)

sent 209 bytes  received 86 bytes  590.00 bytes/sec
total size is 0  speedup is 0.00
/tmp $ ls -la tgt/
total 0
drwxr-xr-x   5 user  wheel  170 18 Aug 15:03 .
drwxrwxrwt  11 root       wheel  374 18 Aug 15:02 ..
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test1
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test2
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test3

src 内のファイルを削除して再度同期します。

/tmp $ rm -rf src/.test1
/tmp $ ls -la src/
total 0
drwxr-xr-x   4 user  wheel  136 18 Aug 15:03 .
drwxrwxrwt  11 root       wheel  374 18 Aug 15:02 ..
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test2
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test3
/tmp $ rsync -avh --delete --progress src/.??* tgt
building file list ...
2 files to consider

sent 75 bytes  received 20 bytes  190.00 bytes/sec
total size is 0  speedup is 0.00
/tmp $ ls -la tgt/
total 0
drwxr-xr-x   5 user  wheel  170 18 Aug 15:03 .
drwxrwxrwt  11 root       wheel  374 18 Aug 15:02 ..
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test1
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test2
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test3

.test1 ファイルは tgt ディレクトリから削除されませんでした。

この場合、--delete オプションが機能しないのはなぜですか?

rsync コマンドを使用してターゲット内の隠しファイルを削除するにはどうすればいいですか?

答え1

これは隠しファイルとは何の関係もありません。気にする必要はないとrm言われたことはありません。 [強調は私による]より:rsyncsrc/.test1man 1 rsync

--delete
これはrsync受信側(送信側にない)の不要なファイルを削除するように指示しますが、同期されているディレクトリのみ。ディレクトリの内容にワイルドカードを使用せずに (例) rsync、ディレクトリ全体 (例dirまたは) を送信するように要求する必要があります。dir/dir/*ワイルドカードはシェルによって展開され、rsyncファイルの親ディレクトリではなく個々のファイルを転送する要求を取得するためです。[…]

個々のファイルではなくディレクトリを同期します。

rsync -avh --delete --progress src/ tgt

答え2

コツは、ディレクトリを同期することです (@Kamil Maciorowski が言及しているように)。ただし、含めるフィルターと除外フィルターも使用して、最初はドット ファイルのみが同期されるようにします。

rsync -avh --delete --progress --include '.*' --exclude '*' src/ tgt

答え3

私の場合は、追加することで--ignore-errors問題は解決しました。

詳細: Cygwin を使用して Linux サーバーから Windows USB ドライブにコピーします。

ソースはserver:/src、宛先は です/cygdrive/e

前回のrsync実行で残った隠しファイルがありました。ファイル名は次のようなものです。.data.qpSS6L

次のコマンドを実行するとないファイルを削除します:

rsync -rvvth --update server:/src /cygdrive/e --delete

以下は --ignore-errors を追加し、隠しファイルを正しく削除します。

rsync -rvvth --update server:/src /cygdrive/e --delete --ignore-errors

関連情報