在终端我可以使用类似的东西:
mv *.ext /some/output/dir/
我想在红宝石中也一样。我可以在反引号(`)或使用system()下使用系统命令,但如何以ruby方式实现相同的功能?
我试过了:
FileUtils.mv '*.sql', '/some/output/dir/'
这不起作用,因为它专门查找文件名'* .sql'
答案 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
。