rsync - does it create a temp file during transfer?
As far as I can see rsync doesn't create the file in the target directory until it is complete.
This must mean that it creates the file in a temp directory somewhere and copies the file into the target directory when it is complete.
First off, is this correct?
If true, is it possible for rsync to set not use a temp directory and instead create the file in the target directory and just keep writing to it until it's complete?
Yes, it does create a temp file.
According to the man page you can specify the directory in which the temp file is stored with the parameter -T as in
-T, --temp-dir=DIR create temporary files in directory DIR
The answer to the second part of your question can also be found there:
--inplace
This option changes how rsync transfers a file when the file's data needs to be updated: instead of the default method of creating a new copy of the file and moving it into place when it is complete, rsync instead writes the updated data directly to the destination file.
It does create a temp file, by default in the target directory and named .<FILE_NAME>.<RANDOM_STRING>
. So, if you are copying foo.txt
, it will create a tmp file called .foo.txt.GV4H3
(GV4H3
is the random string that will be different every time you run it). You can control this behavior using these rsync
options:
--partial
By default, rsync will delete any partially transferred
file if the transfer is interrupted. In some circum‐
stances it is more desirable to keep partially trans‐
ferred files. Using the --partial option tells rsync to
keep the partial file which should make a subsequent
transfer of the rest of the file much faster.
--partial-dir=DIR
A better way to keep partial files than the --partial
option is to specify a DIR that will be used to hold
the partial data (instead of writing it out to the des‐
tination file). On the next transfer, rsync will use a
file found in this dir as data to speed up the resump‐
tion of the transfer and then delete it after it has
served its purpose.
Please read the relevant parts of the rsync
man page (the following is only a small extract of the large section on how to use --partial-dir
).
rsync creates temporary files in the target directory. That file is named like the source but with an extension. It could be like that:
source: foo.bar
target temp: foo.bar.hzmkjt7 (hzmkjt7 is just an example)
The extension is removed after the file has been verified to be an exact copy of the source. During the renaming process ownership, permissions and modification time are set. So it is possible that you don't see the file because of the permissions. Make sure that you have enough permission to see all the files as well those not owned by you in order to see the temp files.