Linux file copy with ETA?
Solution 1
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.
Solution 2
Instead of dd
I would suggest pv
, e.g.:
% tar -cf - INPUT | pv -rbe -s SIZE | tar -xf - -C DEST
Solution 3
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.
Related videos on Youtube
Shaheryar
Updated on September 17, 2022Comments
-
Shaheryar over 1 year
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?
-
alex almost 14 yearsWas posting that. However, be aware that it doesn't provide a reliable "progress over total copy time". However, rsync brings many benefits to this kind of stuff.
-
Teddy almost 14 yearsLinux doesn't even have
SIGINFO
. -
Jeremy Visser almost 14 yearsWhen copying with
dd
I send SIGUSR1 todd
instead to cause it to print the statistics. A simplekillall -USR1 dd
will do the job. (Which works on Linux, even if, as Teddy points out, Ctrl+T doesn’t work.)