Есть несколько шаблонов, которые вы можете использовать здесь, но для применения этих методов ключ состоит в том, чтобы определить простой метод точки входа, который вы можете вызывать по мере необходимости, вместо того, чтобы все эти вещи просто разбросаны в пространстве имен main
.
Извлечение имен файлов из списка аргументов ARGV
:
ARGV.each do |file|
process(file)
end
Вы можете использовать File.basename(file, '.yml')
, чтобы убрать расширения и переключить их на .csv
, если хотите.Держите ваш метод как можно более универсальным.
Во-вторых, вы можете использовать xargs
извне:
find . -name '*.yml' | xargs ruby program.rb
Где это добавит все файлы, соответствующие этому шаблону, в качестве аргументов вашей программы.Вы можете даже настроить параметры для параллельного запуска:
find . -name '*.yml' | xargs -n 2 -p 8 ruby program.rb
Где выполняется 8 параллельных процессов (-p 8
), каждый из которых обрабатывает до двух файлов (-n 2
).
Вы также можете сделать это самостоятельно с помощью:
Dir.glob('source_dir/**/*.yml') do |file|
process(file)
end
Где Dir.glob
отлично подходит для поиска многих вещей.Чтобы распараллелить это, вы можете использовать потоки или разветвление.xargs
- это быстрый способ получить все это бесплатно.