【问题标题】:ruby Copy files based on date modifiedruby 根据修改日期复制文件
【发布时间】:2015-01-12 19:57:31
【问题描述】:

我在 Windows 共享 (A) 上每 10 分钟添加一次文件(具有不同的扩展名),我想将它们复制到 linux 服务器 (B) 并使用脚本对它们进行一些操作。
使用 rubyFilesUtils 我如何创建一个脚本来只复制最后添加的文件(或者有一个观察者将文件复制到文件夹 B 每当它们被添加到我的文件夹 A)

更新这是我目前所拥有的

require 'fileutils'
require 'time'

class Copier
  def initialize(from,to)
    puts  "copying files... puts #{Time.now} \n"

    my_files = Dir["#{from}/*.*"].sort_by { |a| File.stat(a).mtime }
    my_files.each do |filename|
       name = File.basename(filename)
       orig = "#{filename}"
       dest = "#{to}/#{name}"
       FileUtils.cp(orig, dest)
       puts "cp file : from #{orig} => to #{dest}"
    end
  end
end

Copier.new("/mnt/windows_share", "linux_folder")

但是每次调用它都会复制所有的文件...

【问题讨论】:

  • 您的问题太宽泛了,因为有多种方法可以做到这一点。相反,您为什么不向我们展示您的尝试,我们将帮助您解决可能遇到的问题。我建议通读Find 的示例,因为这是一个很好的起点。可以使用 Linux 上的inotify 机制来创建观察者。

标签: ruby file copy


【解决方案1】:

这就是我最终在过去 10 分钟内修改的文件,然后将它们从 windows 共享文件夹复制到 linux 文件夹:

require 'fileutils'
require 'time'

class Copier
def initialize(from,to)  
puts  "copying files... puts #{Time.now} \n"

my_files = Dir["#{from}/*.*"].select { |fname| File.mtime(fname) > (Time.now - (60*10)) })
my_files.each do |filename|
   name = File.basename(filename)
   orig = "#{filename}"
   dest = "#{to}/#{name}"
   FileUtils.cp(orig, dest)
   puts "cp file : from #{orig} => to #{dest}"
  end
 end
end

Copier.new("/mnt/windows_share", "linux_folder")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 2015-02-19
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多