在ruby中一次移动具有相同扩展名的所有文件

时间:2014-05-22 09:40:48

标签: ruby-on-rails ruby

在终端我可以使用类似的东西:

mv *.ext /some/output/dir/

我想在红宝石中也一样。我可以在反引号(`)或使用system()下使用系统命令,但如何以ruby方式实现相同的功能?

我试过了:

FileUtils.mv '*.sql', '/some/output/dir/'

这不起作用,因为它专门查找文件名'* .sql'

3 个答案:

答案 0 :(得分:8)

你可以这样做:

FileUtils.mv Dir.glob('*.sql'), '/some/output/dir/'

答案 1 :(得分:1)

您需要使用Glob,如:

Dir.glob('*.sql').each do|f|
  # ... your logic here
end

或更简洁:

Dir.glob('*.sql').each {|f| FileUtils.mv(f, 'your/path/here')}

查看FileUtils#mv上的官方文档,其中甚至包含Glob的示例。

更新:如果您想确定不进行迭代(尽管我不会那么担心),您可以直接从ruby执行您认为在shell中优化的内容,例如: :

`mv *.ext /some/output/dir/`

答案 2 :(得分:1)

我会使用FileUtils::cp,因为它会将文件内容src复制到dest。如果dest是目录,请将src复制到dest/src。如果src是文件列表,则 dest 必须是目录

FileUtils.cp Dir['*.sql'], '/some/output/dir/'

我不会使用::mv,因为如果文件和目标存在于不同的磁盘分区上,则会复制该文件,然后删除原始文件。

但如果您不打算删除原始文件,请使用::mv