I had a similar problem where I needed to copy files from one directory to another and continue on errors. The idea was to copy as much as possible with the help of an operating system (in my case Debian) tool and then handle possible errors manually.
I used the hint Julie Pelletier provided in her comment to use
rsync. Also I used this answer as template as I wanted to be able to analyze the copy operations which fail.
In summary the solution for your case could be
rsync --archive --itemize-changes --delete /d/ /sdcard/test/
rsync copies the contents of your source path (
/d/) to your target path (
/sdcard/test/). In case the contents already exist in your target directory only the differences will be written (delta-transfer). This allows to abort and continue the process at any time. Failures will be reported without stopping the overall copy operation.
rsync per default only performs a "quick check" using file size and last modified time. More criteria can be set (see below).
--archive specifies a set of file and directory attributes to be checked for differences
--itemize-changes instructs to print a summary for each file. This is very helpful to understand why a file is considered to be different by
rsync. This helped me to understand failures of the copy operation. The message is rather cryptic, check the man page to understand it better.
--delete specifies to delete files at the target location which do not exists in your source location.
In my specific case I used a modified set of comparison criteria as I copied from one file system to another. Maybe this is helpful in your case as well:
rsync --recursive --links --safe-links --times --group --owner --devices --specials --delete --human-readable --stats --verbose --itemize-changes --progress --modify-window=3 source/ target/
The most notable changes are:
--safe-links in order to copy only symbolic links within the copied tree
--perms (was implied by
--archive) as permissions were not correctly set on the target filesystem
--modify-window=NUM sets a tolerance for the last modification time as those were not correctly set on the target filesystem