Unisonは、-force newerオプションを使用して、新しいシンボリックリンクを古いファイルに置き換えます。

Unisonは、-force newerオプションを使用して、新しいシンボリックリンクを古いファイルに置き換えます。

Unison とシンボリックリンクに問題があります。理解しやすくするためにテストケースを作成し、自分で試してみました。

まず、同期する 2 つのディレクトリを作成します。そして、最初のディレクトリにいくつかのファイルを作成します。

~/testdir$ mkdir a
~/testdir$ mkdir b
~/testdir$ echo "hello" > a/one
~/testdir$ echo "goodbye" > a/two

これらのパラメータを使用して unison を実行します。変更時刻が保持され、新しいファイルへの更新が強制されます。

~/testdir$ unison -force newer -times -auto -batch a b

これを実行すると、正確な複製が作成されます。

a:
total 16K
drwx------ 2 pruebas.ubuntu citius 4,0K oct  8 16:51 .
drwx------ 4 pruebas.ubuntu citius 4,0K oct  8 16:50 ..
-rw------- 1 pruebas.ubuntu citius    6 oct  8 16:52 one
-rw------- 1 pruebas.ubuntu citius    8 oct  8 16:52 two

b:
total 16K
drwx------ 2 pruebas.ubuntu citius 4,0K oct  8 16:52 .
drwx------ 4 pruebas.ubuntu citius 4,0K oct  8 16:50 ..
-rw------- 1 pruebas.ubuntu citius    6 oct  8 16:52 one
-rw------- 1 pruebas.ubuntu citius    8 oct  8 16:52 two

ここで問題が発生します。これらのファイルの 1 つを削除し、シンボリック リンクに置き換えます。

~/testdir/a$ rm one
~/testdir/a$ ln -s two one
~/testdir/a$ ls -lah
total 12K
drwx------ 2 pruebas.ubuntu citius 4,0K oct  8 16:55 .
drwx------ 4 pruebas.ubuntu citius 4,0K oct  8 16:54 ..
lrwxrwxrwx 1 pruebas.ubuntu citius    3 oct  8 16:55 one -> two
-rw------- 1 pruebas.ubuntu citius    8 oct  8 16:54 two

次に、Unison はシンボリック リンクを削除し、ファイルの古いバージョンに置き換えます。

~/testdir$ unison -force newer -times -auto -batch a b
Contacting server...
Looking for changes
Reconciling changes
new link <====            one  
Propagating updates
UNISON 2.40.102 started propagating changes at 16:56:25.03 on 08 Oct 2014
[BGN] Copying one from /home/remoto/pruebas.ubuntu/testdir/b to /home/remoto/pruebas.ubuntu/testdir/a
[END] Copying one
UNISON 2.40.102 finished propagating changes at 16:56:25.03 on 08 Oct 2014
Saving synchronizer state
Synchronization complete at 16:56:25  (1 item transferred, 0 skipped, 0 failed)
~/testdir$ ls -lah a
total 16K
drwx------ 2 pruebas.ubuntu citius 4,0K oct  8 16:56 .
drwx------ 4 pruebas.ubuntu citius 4,0K oct  8 16:54 ..
-rw------- 1 pruebas.ubuntu citius    6 oct  8 16:54 one
-rw------- 1 pruebas.ubuntu citius    8 oct  8 16:54 two

オプションを使わないと、このようなことは起こりません-force newer。しかし、これは奇妙な動作のように思えます。マニュアル言う:

また、-force newer (または -force older) を指定して、Unison に、より新しい (より古い) 変更時刻を持つファイルを強制的に選択させることもできます。この場合、-times 設定も有効にする必要があります。

Unison はシンボリックリンクでこの動作に従っていないようです。これはバグのように思えますか? それとも私が何か見落としているのでしょうか?

関連情報