Ruby:Dir.glob没有返回任何文件

时间:2013-12-18 20:16:10

标签: ruby command-line directory

我正在尝试将文件从一个文件夹复制到另一个文件夹,然后记录复制到日志文件中的所有文件的名称。两个文件夹都在同一目录中,我通过命令行获取该路径。在我的程序中,目前通过

发生
argument3 = ARGV[2] + "\\"

成功变为'c:\ user \ alexander \ desktop \'。 然后我将桌面上的文件复制到桌面上的文件夹

system "copy #{argument3}*.* #{argument3}TestFolder"

这也成功完成了我从cmd输出和检查文件夹本身验证的内容。最后,我试图将文件名保存到路径为“c:\ user \ alexander \ desktop \ log.txt”的日志文件中。我尝试使用

来做到这一点
logFile = "c:\\user\\alexander\\desktop\\log.txt"
Dir.glob(argument3 + "*.*").each do |fileName|
    File.open(logFile, 'a') {|file| file << "\n" + fileName}
end

这没有任何作用,让我的logFile为空。我尝试通过将File.open选项更改为'w'而不是'a'来解决此问题,但仍然没有做任何事情。然后我认为我必须不正确地实现它所以我试着把

Dir.glob(argument3 + "*.*").each do |fileName|
    puts fileName
end

作为一个完整性检查,但这也没有输出。我想要完成的是什么?如果是的话,我做错了什么,如果没有其他方法可以做到这一点?

编辑1: 将Dir.glob参数更改为

Dir.glob("*")

使它将当前目录文件写入日志。我认为这意味着我必须在我的argument3变量中有一些看不见的拼写错误但是当我做了

puts argument3 + "*"

它的输出c:\ user \ alexander \ desktop *在我将它作为参数传递给Dir.glob之前,我尝试连接文件路径为

filePath = argument3 + "*"
Dir.glob(argument3 + "*.*").each do |fileName|
    File.open(logFile, 'a') {|file| file << "\n" + fileName}
end

它仍然没有像我预期的那样工作。是否有一些技巧可以传递到Dir.glob的确切文件路径?我无法保证程序将始终位于运行时需要复制的目录中。

3 个答案:

答案 0 :(得分:13)

Dir.glob没有反斜杠。将它们替换为正斜杠,即使在Windows上:

logFile = "c:\\user\\alexander\\desktop\\log.txt"
Dir.glob(argument3.gsub('\\','/') + "*.*").each do |fileName|
    File.open(logFile, 'a') {|file| file << "\n" + fileName}
end

答案 1 :(得分:2)

Dir.glob似乎无法接收文件路径,只接受在当前目录中查找的文件模式。我有的解决方法是使用Dir.chdir移动到我需要的目录,然后使用Dir.glob(“”)获得所需的输出

答案 2 :(得分:0)

尝试一颗星:

logFile = "c:\\user\\alexander\\desktop\\log.txt"
Dir.glob(argument3 + "*").each do |fileName|
    File.open(logFile, 'a') {|file| file << "\n" + fileName}
end