Vagrant: скрипт Ruby для возврата имени последнего созданного файла - PullRequest
0 голосов
/ 16 ноября 2018

У нас есть бродячий файл с триггером, например

DB_NAME="mydb"
TIME=(Time.now.strftime("%Y%m%d%H%M%S"))
SQL_BACKUPS=(Dir["./config/schema/*_#{DB_NAME}.sql"])

config.trigger.before [:destroy, :provision] do |trigger|
    trigger.info = "Dumping database to /vagrant/config/schema/#{TIME}_#{DB_NAME}.sql"
    trigger.run_remote = {inline: "mysqldump --add-drop-table -u #{DB_USERNAME} -p#{DB_PASSWORD} #{DB_NAME} > /vagrant/config/schema/#{TIME}_#{DB_NAME}.sql"}
end

в /vagrant/config/schema/, у нас есть резервные файлы, такие как: 20181116160919_mydb.sql

Как найти в ruby ​​все файлы, такие как *_mydb.sql и/ или вернуть имя последнего созданного?

Мы хотим автоматизировать резервное копирование БД при уничтожении, предоставлении и обновлении.

РЕДАКТИРОВАТЬ:

SQL_BACKUPS=(Dir["./config/schema/*_#{DB_NAME}.sql"]).sort
SQL_BACKUPS.reverse.each do |filename|
    puts "#{filename}"
end

возвращать списки с файлами sql

PS, у меня нет опыта работы с Ruby.

1 Ответ

0 голосов
/ 16 ноября 2018

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

File::Statимеет метод ctime (возвращает время создания), так что это может быть сделано как.

SQL_BACKUPS=Dir["./config/schema/*_#{DB_NAME}.sql"].map { |f| {name: f, ctime: File::Stat.new(f).ctime } }
sorted = SQL_BACKUPS.sort_by { |f| f[:ctime] }
sorted.last.name # gives the one that was created the last.
...