Whenever you move folders between different OSes you’ll likely find various OS-specific files coming along for the ride (e.g., .DS_Store from OS X or Thumbs.db from Windows). It’s not hard to remove these recursively from an existing directory using find:

$ find . -type f \( -name '.DS_Store' -o -name 'Thumbs.db' \) -delete

It’d be better to just never copy those files in the first place, wouldn’t it? If you’re using rsync, you can specify exclusions like so:

$ rsync -avz --exclude '.DS_Store' --exclude 'Thumbs.db' /source /destination

Using --exclude becomes cumbersome if you’re chaining together very many filenames, though, so instead you might list the exclusions in a separate file. I have a file in my home directory called .rsync_exclude, which can be used with the --exclude-from parameter:

$ rsync -avz --exclude-from=/home/me/.rsync_exclude /source /destination

The .rsync_exclude file is just a plaintext list of filenames:

$ cat ~/.rsync_exclude

Lastly, if you’d like to use an exclusion list in a bash script you might construct it like this:

EXCLUDED=('.DS_Store' 'Thumbs.db')
rsync -avz ${EXCLUDED[@]/#/--exclude=} /source /destination

Note that I’m using an array for EXCLUDED rather than brace expansion to work around bash’s order of evalution (braces are evaluated before variables, which means braces contained in variables would never be expanded).