Я не уверен, какова ваша начальная точка или что вы подразумеваете под ручным обходом, но, предполагая, что вы перебираете коллекцию файлов, вы можете использовать метод reject, чтобы исключить элементы на основе оценки логического значения состояние.
пример:
Dir.glob( File.join('.', '**', '*')).reject {|filename| File.extname(filename)== '.cs' }.each {|filename| do_copy_operation filename destination}
В этом примере Glob возвращает перечисляемую коллекцию имен файлов (включая каталоги). Вы исключаете ненужные элементы в фильтре отбраковки. Затем вы реализуете метод, который принимает имя файла и место назначения для копирования.
Вы можете использовать метод массива include? также в блоке отклонения в соответствии с примером поиска из Geo.
Dir.glob( File.join('.', '**', '*')).reject {|file| ['.cs','.txt'].include?(File.extname(file)) }