
私が実行した手順は次のとおりです。
いくつかのテストファイルを作成します。
/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
言われたことはありません。 [強調は私による]より:rsync
src/.test1
man 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