I'm not sure what you mean, that is the default behavior of the copy command (cp):
Here are some examples of more complex operations:
Copy all files read from a list (assuming sane file names, no spaces or weird characters):
while read n; do cp $n destination_dir < file_list.txt
As above but works for file names with spaces or strange characters:
while IFS= read -r n; do cp "$n" destination_dir < file_list.txt
Find all files matching a pattern and copy them:
find . -name "*data*" -exec cp {} destination_dir \;
As above but works with weird file names:
find . -print0 -name "*data*" | xargs -0 cp -t destination_dir \;
I still don't understand why you would want to do this but OK. To add a copy operation to be executed after the current one has ended, you could do this:
Create a list of the files you want to copy. Since you start with one file, the list will contain just one file name:
echo "fileA" > list.txt
Start copying the file by reading the list (as before, this assumes sane file names, use example 2 from the list above if your file name can contain spaces or strange, non alphanumeric characters):
while read n; do cp -v $n destination_dir < file_list.txt
Find the next file you want to copy and add it to the list:
echo "fileB" >> list.txt
As long as you do step 3 before the copying has finished, the next file will be copied as soon as the first one is done.
I just don't understand why you don't simply launch many independent cp commands instead. You are complicating things with no reason as far as I can tell.
cp? – terdon Jan 22 at 15:11;,&&or||. E,g 'task1 ; task2' will run task1, and then task2. Both tasks could by copy commands. ( && and || are conditionals.task1 && task2means run task1, if succesful (no error condition) then run task2, else skip task2. || or the reverse, run only on error. ) – Hennes Jan 22 at 15:23