目录
概览
获取当前路径和修改当前工作目录
Dir.pwd -> string
#接受一个可选参数,成功返回0。不指定string切换到HOME目录
Dir.chdir( [ string] ) -> 0
目录是否存在和创建删除一个目录
Dir.exist?(file_name) -> true or false
Dir.mkdir( string [, integer] ) -> 0
Dir.delete( string ) -> 0
# 创建一个Dir实例对象
Dir.new( string ) -> aDir
获取子目录
Dir.entries( dirname ) -> array
Dir.children( dirname ) -> array
Dir.foreach('./') do |entry| end
根据指定的模式匹配文件路径
files = Dir.glob('./**/*.txt', File::FNM_CASEFOLD)
详细
class XYDir
# 获取当前路径
def usage1
pwd = Dir.pwd;
# /Users/lixiaoyi/LXYFile/ResourceInCoding/HelloRuby
puts pwd
end
# 返回指定路径下所有文件和子目录的数组,包括 '.' 和 '..'
def usage2
entries = Dir.entries('./')
# entries.class = Array, entries = [".", "..", "bin", "README.md", ".gitignore", "lib", "Gemfile", "Gemfile.lock", ".git", ".vscode"]
puts "entries.class = #{entries.class}, entries = #{entries}"
# 也是返回子目录,不包括 .. 和 .
children = Dir.children './'
puts "children = #{children}"
end
# 遍历指定路径下的所有文件和子目录,对每个条目执行块中的操作
def usage3
Dir.foreach('./') do |entry|
puts "entry = #{entry}"
end
# entry = .
# entry = ..
# entry = bin
# entry = README.md
# entry = .gitignore
# entry = lib
# entry = Gemfile
# entry = Gemfile.lock
# entry = .git
# entry = .vscode
end
def usage4
if Dir.exist?("./mytest")
puts "目录存在"
# 改变当前工作目录到指定路径
Dir.chdir('./mytest')
cur = Dir.pwd
puts "cur = #{cur}"
Dir.chdir("../")
cur = Dir.pwd
puts "cur = #{cur}"
# 删除一个空目录
# Dir.rmdir('./mytest')
# entries = Dir.entries './'
# puts "entries = #{entries}"
# 删除一个空目录
# Dir.delete('./mytest')
# entries = Dir.entries './'
# puts "entries = #{entries}"
# 删除一个目录及其内容
# FileUtils.rm_r('./mytest')
# entries = Dir.entries './'
# puts "entries = #{entries}"
else
puts "目录不存在"
# 创建一个目录
Dir.mkdir('./mytest')
entries = Dir.entries './'
puts "entries = #{entries}"
end
end
# 根据指定的模式匹配文件路径。
def usage5
# 创建目录
self.usage4
# Dir.glob(pattern, [flags])
# pattern: 匹配的模式,可以包含通配符和正则表达式
# flags: 可选参数,可以指定一些标志,用于修改匹配行为
# File::FNM_CASEFOLD 用于忽略大小写
files = Dir.glob('./**/*.txt', File::FNM_CASEFOLD)
puts "files = #{files}"
end
# 创建一个dir对象
def usage6
# Dir.new 的好处之一是,你可以创建多个 Dir 对象来表示不同的目录,而无需不断更改当前工作目录。
# 这使得在处理多个目录时,代码更加模块化和易读。
dir = Dir.new './'
puts dir.children
puts '------------'
puts dir.entries
puts '------------'
dir.entries.each do |entry|
puts "entry = #{entry}"
end
end
# 查找某个目录下是否存在某个文件
# 如果当前目录找不到,会向父目录查找,直到找到根目录 /
def searchFile dir, filename
if Dir.new(dir).children.include? filename
return [true, dir]
elsif dir == "/"
return [false, "/"]
else
next_path = File.expand_path("..", dir)
return searchFile next_path, filename
end
end
def execCMD cmds = []
# ruby ./mytest/test.rb cmd1 cmd2
result = self.searchFile "./mytest", "test.rb"
if result.first
rbfilePath = File.expand_path "test.rb", result[1]
cmdStr = ""
cmds.each do |cmd|
if cmd.include? " "
cmd = "\"" + cmd +"\""
end
cmdStr = cmdStr + " " + cmd
end
# puts "all = #{rbfilePath} #{cmdStr}"
end
# 当你传递一个字符串给 system 时,它会将这个字符串作为命令在系统 shell 中执行
# 执行成功返回true, 执行失败返回false
# result = system "ruby #{rbfilePath} #{cmdStr}"
# 也可以这么写
result = system "ruby", rbfilePath, cmdStr
if result
puts "指令执行成功"
else
puts "指令执行失败"
end
end
def self.show
xyDir = XYDir.new
# xyDir.usage6
# arr = xyDir.searchFile "./", ".cocoapods"
# puts "arr = #{arr}"
xyDir.execCMD
# xyDir.execCMD ["arg1", "arg2"]
end
end
行者常至,为者常成!