Bitt's advice is good (and exactly what I'd suggest), but I thought I'd add some explanation to your error message.

Linux, like any other operating system, has limits on how many command-line arguments can be passed when starting a new process. The limits are large enough that you'd never type enough by hand, but it's easy to get the shell to do it for you. If you type something like
/drive1/fids/*
it turns that into as many arguments as there are matching files, i.e.
/drive1/fids/100 /drive1/fids/101 /drive1/fids/1000 /drive1/fids/1001 /drive1/fids/1010 /drive1/fids/1011 /drive1/fids/1020 
etc. Obviously, with the fids directory, this makes for a very long command (you just don't get to see it).

You can make the argument list shorter by changing to that directory, then using *, which expands to 100 101 1000 1001 1010 1011 1020 etc, but that may still be too long. Then you can split it into two copy commands:
cd /drive1/fids/

cp -p [0-4]* /drive0/fids
cp -p [5-9]* /drive0/fids

I hope it's obvious how to extend this if you need to do it in 3 or more batches. Note also that I used the '-p' flag to cp to preserve the last-modified times when doing the copy.
_________________________
Toby Speight
030103016 (80GB Mk2a, blue)
030102806 (0GB Mk2a, blue)