Как автоматически находить файлы указанного типа в текущем каталоге или любых указанных вложенных папках в Ruby?

#ruby #automation #build-automation #rake #rakefile

#ruby #автоматизация #сборка-автоматизация #rake #rakefile

Вопрос:

Я использую следующий код для преобразования файлов из php в html. Для того, чтобы это сработало, я должен ввести имя каждого файла во второй строке.

 p "convert files"
%w(file1 file2 file3).each do |name|
  system %(php #{DIR}/#{name}.php > #{DIR2}/#{name}.htm)
end
  

Может кто-нибудь сказать мне, как сделать так, чтобы он автоматически находил любые файлы .php в главном каталоге и искал в любой определенной папке и их подпапках дополнительные файлы .php и сохранял их с похожими именами папок?

Например:

 file1.php -> file1.htm
about-us/file2.php -> about-us/file2.htm
contact-us/department/file3.php -> contact-us/department/file3.htm
  

Ответ №1:

Самый простой способ — использовать Dir :

 Dir.chdir('where_the_php_files_area')
Dir['**/*.php'].each do |php|
    htm = 'where_the_html_files_should_go/'    php.sub(/.php$/, '.htm')
    system("php #{php} > #{htm}")
end
  

** Шаблон для Dir.glob (ОН ЖЕ Dir[] ) рекурсивно сопоставляет каталоги, так что Dir[**/*.php] вы получите все файлы PHP в текущем каталоге.

Комментарии:

1. Спасибо! Итак, если бы я хотел исключить каталог типа «включает» (и, возможно, другие), как я мог бы это сделать?

2. @Cofey: Самым простым способом было бы добавить if(i_like_this_path(File.dirname(php)) проверку внутри блока. File.dirname выдаст вам часть имени файла каталога, для которой вам нужно будет указать что-то разумное i_like_this_path() .

3. @Andrew Grimm: Оставьте мой отступ в покое, пожалуйста. Я нахожу стандарт Ruby с двумя пробелами совершенно нечитаемым, и я отношусь к этому так же, как и сообщество Ruby 🙂

4. @mu слишком короткий, я, наконец, нашел время попробовать ваш скрипт, и, похоже, он не переходит во вложенные папки для поиска файлов .php. Это создает только файлы .htm в главном каталоге. Есть идеи?

5. @Cofey: Это не поиск всех файлов PHP или это ошибка с htm путем? Dir['**/*.php'] Должен найти все файлы PHP в текущем каталоге. Что Dir['**/*.php'].inspect нужно сказать, когда вы находитесь в irb нужном каталоге?