I'm copying a large amount of files between disks. There's approximately 16 GB of data. I'd like to see progress information, and even an estimated time of completion from the command line.
Any advice?
Use rsync --human-readable --progress.
For single files and block devices there's also pv. And if you genuinely need an accurate progress bar, try using tar with pv — something like this:
source=/the/source/directory
target=/the/target/directory
size=$(du -sx "$source")
cd "$source"
find . xdev -depth -not -path ./lost+found -print0 \
| tar --create --atime-preserve=system --null --files-from=- \
--format=posix --no-recursion --sparse \
| pv --size ${size}k \
| { cd "$target"; \
tar --extract --overwrite --preserve-permissions --sparse; }
Be warned, however, that GNU tar does not yet support ACLs or extended attributes, so if you are copying filesystems mounted with the "acl" or "xattrs" options, you need to use rsync (with the "--acls" and "--xattrs" options). Personally, I use:
rsync --archive --inplace --hard-links --acls --xattrs --devices --specials \
--one-file-system --8-bit-output --human-readable --progress /source /target
Also look into whether you want to use the --delete and/or --numeric-ids options.
Have you tried rsync -P? If you're using dd, e.g. tar -cf - src | dd | (cd dest; tar -xf -) you should be able to use Ctrl-T (SIGINFO) to see your progress.