5 ms·
Rsync has weird syntax, I have accidentally copied contents of dirs instead of the dir
by jacobush 6y ago
Rsync has weird syntax, I have accidentally copied contents of dirs instead of the dir
- mhalle 6y agoRsync has "weird" syntax for a reason. Unlike other unix-like commands, it treats trailing slashes as significant. If a directory has a trailing slash, it means "contents" of the directory". No slash means "the directory itself". These are two different concepts, and a program that copies directories should take the difference into account. scp (and cp, for that matter) don't take this difference into account. That leads to gotchas with recursive (-r) copying. Most importantly, scp isn't idemopotent: scp -r fromdir todir If todir doesn't exist, scp will copy the contents of directory fromdir to a new directory named todir. Execute the same command again (now that todir exists), and scp will copy fromdir to todir/fromdir . On the other hand: rsync -a fromdir/ todir will always copy the contents of fromdir into a directory named todir (effectively, a directory rename operation), whether todir exists or not. rsync -a fromdir todir will always copy the directory fromdir into the directory todir, whether todir exists or not. These rsync operations are idempotent, which it important because rsync is designed to incrementally re-sync directories. It is expected that it will commonly be run more than once, which is why it needed to address this IMHO fundamental bug/limitation in cp and scp.
- WanderPanda 6y agoThanks for the concise clarification! I always was too lazy to think and did trial and error until it did the thing I intended :)
- Buttons840 6y agoWhat does rsync'ing "the directory itself" (in contrast to the directory content) even do? A mkdir? Does it even need to use the network connection?
- 411111111111111 6y agoRsync only works on directories in recursive mode which also copies the contents
- mhalle 6y ago"Rsyncing the directory itself" means making a copy of the directory node (the root of the tree) and naming it with the original name in the new location. That is different than taking the children of the source directory and copying them into the new location. Scp and cp have the same semantics, so cp is vulberable to this gotcha as well. Rsync doesn't have to be used with remote sources or targets (nor does scp).
- Izkata 6y ago> so cp is vulberable to this gotcha as well This is in fact why use rsync for local copies as well, it's much more consistent.
- orra 6y agoAh, good explanation. Rsync's command line syntax always felt more intuitive to me, and it being idempotent is part of that.