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
| Code | Meaning |
|---|---|
| >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) |
| *deleting | The file was deleted (with --delete) |
Common usage
# 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.