我有很多空目录,除了其中的其他空目录。它们还与其中包含文件的其他目录混合在一起,因此我只想删除空目录及其(现在为空)父目录。
我想出了这个:
empty_dirs = -> { Dir.glob("#{dir}/**/*").select { |d| File.directory?(d) && Dir.empty?(d) } }
empty_dirs.call.each { |d| Dir.rmdir(d) } until empty_dirs.call.empty?
这很好用,但我想知道是否有标准的方法 - 比如FileUtils.rmdir_r(dir)
- 而不是必须写一个循环。
答案 0 :(得分:3)
Dir.rmdir
是shell rmdir
的包装器,当目录不为空时失败(ruby版本引发异常)
Errno :: ENOTEMPTY:目录不为空@dir_s_rmdir
有人可能会利用这个
Dir.glob("#{dir}/**/*").
select(&File.method(:directory?)).
sort_by(&:length). # to start as deep as possible
reverse. # longest first
each do |directory|
Dir.rmdir(directory) rescue :skipped
end