For 5), you might want to look at the file test operators. Perhaps even storing the filenames of already processed files in an array that is dumped into a file that can be read in when the script runs (something like an external config file). Data::Dumper can help with this. This is the solution I use for some backups that I run on our systems. May not be perfect or elegant, but works for me. I'm sure others might have better solutions.