--inplaceオプションを使用しない場合、ファイルをコピーするときにRsyncが生成する一時ファイルの拡張子をどのように「選択する」のかを判断するのに問題があります。
例:Rsyncを使ってコピーしたいですsourceDirectory/myFile.txt
。targetDirectory/
RsyncmyFile.txt
にコピーするtargetDirectory/
と。.myFile.txt.W4zvLi
targetDirectory/
その後、Rsync.myFile.txt.W4zvLi
の名前がmyFile.txt
。
問題は、RsyncがこのW4zvLi
拡張を使用する理由と、Rsyncプログラムが実行されるたびに変更されるように見えるのはなぜですか?
答え1
rsyncはmktemp(3)
POSIX関数を使用して一意の一時ファイル名を生成します。この関数にテンプレート文字列を渡すと、テンプレート内のすべての文字が任意の文字に置き換えられたmktemp
ファイル名が返されます。X
特に、コマンドラインで試すには、次のようにバイナリを使用rsync
できます.XXXXXX
。mktemp
mktemp(1)
mktemp -u "/tmp/foo.XXXXXX"
答え2
男性同期:
Beginning with rsync 3.1.1, the temp-file names inside
the specified DIR will not be prefixed with an extra dot (though
they will still have a random suffix added).