我有很多目录是空的,除了里面的其他空目录。它们还与其中包含文件的其他目录混合在一起,因此我只想删除空目录及其(现在为空的)父目录。
我想出了这个:
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) -而不是必须编写循环。
发布于 2018-06-03 19:48:36
Dir.rmdir是外壳的rmdir的包装器,当目录不为空时会失败(ruby版本会引发异常)
错误号::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
endhttps://stackoverflow.com/questions/50665333
复制相似问题