Copying files should be simple, yet there are a number of ways of transferring files.
Some of the ways that I could think of are listed here.
# -a=archive mode; equals -rlptgoD # -r=recurse into directories # -l=copy symlinks as symlinks # -p=preserve permissions # -t=preserve modification times # -g=preserve group # -o=preserve owner (super-user only) # -D=preserve device files (super-user only) and special files # -v=verbose # -P=keep partially transferred files and show progress # -H=preserve hardlinks # -A=preserve ACLs # -X=preserve selinux and other extended attributes $ rsync -avPHAX /source /destination # cross systems using ssh # -z=compress # -e=specify remote shell to use $ rsync -azv -e ssh /source user@destinationhost:/destination-dir # -xdev=Don’t descend directories on other filesystems # -print=print the filenames found # -p=Run in copy-pass mode # -d=make directories # -m=preserve-modification-time # -v=verbose $ find /source -xdev -path | cpio -pdmv /destination # let's not forget good old cp # -r=recursive # -p=preserve mode,ownership,timestamps # -v=verbose $ cp -rpv --sparse=always /source /destination # tar # -c=create a new archive # -v=verbose # -f=use archive file $ tar cvf - /source | (cd /destination && tar xvf -) # scp $ scp -r /source user@destinationhost:/destination-dir # copy an entire partition $ dd if=/dev/source-partition of=/dev/destination-partition bs=<block-size>