Skip to content
Latchkey

rsync -i (--itemize-changes): Reading the Change Codes

rsync -i prints an 11-character change code per file so you can see exactly what changed without full verbose output.

For deploys with thousands of files, --itemize-changes gives a compact, greppable diff of the deploy, far cleaner than -vv.

What it does

Each itemized line begins with a code like ">f+++++++++". The first character is the update type (> received, < sent, c created, * message like deleting), the second is the file type (f file, d dir, L symlink), and the remaining letters flag which attributes changed (c checksum/content, s size, t time, p perms, o owner, g group).

Decoding the code

CodeMeaning
>f+++++++++New file received (all attributes are new)
>f.st......File received; size and time differed
>f..t......Only the timestamp changed
cd+++++++++A directory was created
.f...p.....Only permissions changed (no data sent)
*deletingThe file was deleted (with --delete)

Common usage

Terminal
# Compact, greppable record of a deploy
rsync -ai --delete dist/ user@host:/var/www/app/ | tee deploy.log

# Count what actually changed
rsync -ain dist/ user@host:/var/www/app/ | grep -c '^>'

In CI

Pipe -i output to a log artifact so each deploy has an auditable list of changes. Grepping for "^>" counts transferred files and "deleting" counts removals, which you can assert on to catch a runaway --delete before it does damage.

Common errors in CI

There is no error from -i, but the codes confuse people. A leading dot ("." update type) means no transfer happened and only attributes changed; that is normal, not a failure. A "*deleting" line only appears when --delete is active.

Related guides

Run this faster and cheaper on Latchkey managed runners. Start free →