我是Ruby的新手。 我正在尝试编写一个删除所有已编译文件的脚本。 例如,我有源文件和目标文件以及一些中间文件。 我需要保留源文件和目标文件。基本文件名是未知的,但是如果有的话 file.c所有其他文件都有'file'basename,因此会有file.s,file.o和file
我认为我能做的就是找一个'foo.c',如果它存在,删除除目标文件之外的所有'低'文件。如果没有foo.c文件,那么我正在寻找foo.s文件,并删除所有其他文件等。
所以我想我会使用Dir.entries来获取文件夹中所有文件名的数组
如果使用bash脚本更容易,我会很高兴听到任何建议
我试过
Dir.entries(".").each do filename
puts filename
end
我可以从中获取文件扩展名,我可以检查它是否是.s或.c,但是如果没有.c存在我不想删除.s文件
这是我目前的代码:
Dir.entries(".").each do |filename|
if File.extname(filename) == ".c"
name = File.basename(filename, ".c")
if File.exists?(name + ".s")
File.delete(name + ".s")
end
...
end
...
end
答案 0 :(得分:0)
files_with_same_names = Dir.glob('*').group_by { |file| File.basename(file, '.*') } # this way we group files with the same base name
files_with_same_names.each_pair do |base_name, files_with_same_basename|
extensions = ['.c', '.s'] # put the #1 priority extension first, the #2 priorty second etc.
extensions.each do |extension|
full_name = "#{base_name}#{extension}"
if files_with_same_basename.include?(full_name)
files_with_same_basename.delete(full_name) # delete the top-level name from our array
files_with_same_basename.each do |file| # and delete the rest of the files
puts "Deleting #{file}"# Replace puts "Deleting #{file}" with File.delete(file)
end
end
end
端
我已经使用这些文件对其进行了测试: 交流转换器 广告 b.s b.h B.O
它即将删除" a.d" (因为它找到了a.c)和b.h和b.o(因为它找到了b.s而不是b.c)。