无业游民:Ruby脚本返回最后创建的文件的名称

时间:2018-11-16 15:29:06

标签: ruby vagrant

我们有带有触发器之类的无业游民文件

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 :(得分:0)

我知道您有带时间戳的文件,但是,如果没有时间戳或区分创建时间的方法,下面的方法就是我用于非带时间戳的文件的方法。

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.