Question: I've been using `rsync` for Android to backup my phone to a remote NTFS filesystem on a Linux system for a while.

Recently, the HDD containing the NTFS filesystem has started to fail (or throw "I/O Errors") so I took the opportunity to copy all the files onto a new HDD and new NTFS filesystem. In this instance I used the "FastCopy v2.11" tool for Windows.

My problem is that when I do an rsync "dry run" I can see that it wants to recopy files which already exist on the remote rsync folder. For example, when I run with "-iv" I get this kind of output:

Which, as I understand it means that rsync wants to copy this file to the remote rsync because of a timestamp difference.

The strange thing is that if I use "Astro" for Android to look at the local file properties, I can see that the file's size, modified time, and MD5 checksum are exactly the same as that of the remote file (using `ls -l` to check the modified time).

Given that I recently copied the remote rsync files from an old NTFS filesystem, the remote file's ctime is different (using `ls -lc`).

Does `rsync` look at the remote ctime, and if so is there any way I can use `rsync`, or `ntfs-3g` to get around this problem?

Answer: 
In the shell, `&&` and `;` are similar in that they both can be used to terminate commands. The difference is `&&` is also a conditional operator. With `;` the following command is always executed, but with `&&` the later command is only executed if the first succeeds.

```
false; echo "yes"   # prints "yes"
true; echo "yes"    # prints "yes"
false && echo "yes" # does not echo
true && echo "yes"  # prints "yes"

```

Newlines are interchangeable with `;` when terminating commands.
`&&` and `||` are boolean operators. && is the logical AND operator, and bash uses [short cut evaluation](http://en.wikipedia.org/wiki/Short-circuit_evaluation "short cut evaluation"), so the second command is only executed if there is the chance that the whole expression can be true. If the first command is considered false (returned with a nonzero exit code), the whole AND-expression can never become true, so there is no need to evaluate the second command.

The same logic applies analogously to the logical OR, ||: if the first command is successful, the whole OR-expression will become true, so no need to evaluate the second command.