如何在Ruby中使用目录

Baklib
Baklib 最后一次编辑 4 年多前
2056
您是否知道可以使用Ruby浏览文件系统?
使用Ruby“ Dir”类。
您可以列出目录条目,更改当前目录,甚至创建新文件夹!
这是一个例子:
  1. 文件名= Dir 。条目(“。” )
entries方法返回文件名条目的数组。每个条目都是一个字符串,因此,如果要实际读取这些文件,则需要将其与Ruby File类结合使用。
顺便说一句,该点(.)表示当前目录。
这将是您的代码正在运行的目录,而不是您在代码中运行的目录(在终端中)。
因此...
使用该Dir.pwd方法检查当前目录可能会有所帮助。
现在:
获取我的终极Ruby秘籍表: 这个方便的7页PDF帮助您快速找到所需的Ruby语法,正在寻找的Ruby方法或您不太记得其名称的内置类。
让我们学习如何使用Dir该类创建新目录(mkdir),重命名它们(mv)以及查找遵循特定模式的文件名(glob)。

使用Ruby的Mkdir方法创建新目录

如果要使用Ruby创建新文件夹,则可以使用该Dir.mkdir方法。
范例:
  1. 迪尔。mkdir (“测试” )
如果指定了相对路径,则会在当前路径(Dir.pwd)下创建此目录。
您可能会遇到一些错误:
  1. 目录已存在(Errno::EEXIST)
  2. 权限被拒绝(Errno::EACCES)
  3. 您正在尝试在尚不存在的另一个文件夹(Errno::ENOENT)下创建一个文件夹
当您尝试创建嵌套目录时,通常会发生最后一个错误。
或者,如果您使用的是不存在的绝对路径。
两种解决方案:
  1. 在创建目录之前检查目录是否存在(使用Dir.exists?)
  2. 使用更高级的(下一节)
让我们继续学习!

FileUtils模块的高级操作

如果您需要额外的功能,则可以FileUtils从标准库中引入模块。
它包含诸如mkdir_p一步创建嵌套目录之类的方法。
这是一个例子:
  1. 需要'fileutils'
  2. FileUtils 。mkdir_p (“ / tmp / testing / a / b” )
很酷吧?
不仅如此,FileUtils还以关键字参数的形式为所有文件操作带来了更多选项。就像verbose选项(打印Linux命令)和noop(不更改文件)选项一样。
试试看!

如何重命名目录

Ruby允许您从操作系统用户界面或终端中执行所有操作。
例如…
您可以这样重命名目录:
  1. FileUtils 。mv (“ / tmp / a” ,“ / tmp / b” )
您还需要在FileUtils这里使用,因为该类mv不可用Dir

如何更改当前目录

因为所有目录操作都是从当前目录运行的,所以您可能需要更改它。
您可以使用该Dir.chdir方法来执行此操作。
范例:
  1. 迪尔。CHDIR (“/ TMP” ){ 风向。条目(“。” )}
这有两种工作方式:
  1. 对于块,当前目录仅针对块内的代码更改
  2. 在没有块的情况下,方法调用后所有代码都会更改
注意,这chdir仅在您的Ruby进程中起作用,而不会影响“外部世界”。
换一种说法…
Ruby程序停止运行后,它不会更改Shell的工作目录。

列出具有模式匹配的文件和目录

是否要查找文件夹中的所有Ruby文件?使用该glob方法轻松完成任务!
范例:
  1. 迪尔。glob (“ * .rb” )
您可以使用任何其他所需的扩展名,例如“ .txt”或“ .yml”。或文件名中包含的任何其他文本。
是否要在所有文件夹中查找文件?
是的,有可能:
  1. 迪尔。glob (“ ** / *。rb” )
结果是包含所有文件名(包括相对路径)的数组。通过使用File.basename方法,您可以删除列表中的路径并仅获取文件名glob

摘要

您已经了解了如何使用DirFileUtils类在Ruby中使用目录。
现在轮到您将其付诸实践了。
谢谢阅读!