Bulk copying
Copying files on or between Linux/Unix machines is considerably nicer than on their Windows counterparts. Recursive copy with the built-in command (cp) is available by addition of a single flag, where Windows often requires a separate program (xcopy) and additional flags to achieve the same task. Copying over networks is a breeze with SCP, where Windows would complain about the shell not supporting UNCs. Alternatively, you would have to map network shares to drive letters first, and keep track of which letters are what shares.
Of course, on Windows you can drag/drop the files in a GUI much like on Linux, but the moment you go away for a coffee will be the moment that Windows freezes the operation and pops up an annoying dialog asking you if you’re sure that you want to copy some of the files. Then half an hour later when you return, the copy is still only ten seconds in…
On the Linux front, sometimes we want to customize things a bit:
- error handling (fail or continue?)
- symbolic link handling (reference or duplicate?)
- hard link handling (reference or duplicate?)
- metadata (copy or ignore?)
- permissions (copy or ignore?)
- sparse files (preserve or fill?)
- filesystem boundaries (recurse or skip?)
Additionally, copying many small files over SCP can take a very long time; SCP performs best with large files. Rather than re-invent the wheel with a whole new file copy & networking program, we can do much better with the tools that we already have, thanks to the modular and interoperable nature of software built upon the Unix philosophy.
Most (or maybe all) of these problems can be solved with rsync, but rsync is not available in all environments (e.g. managed servers, overpriced Microsoft crap).