我正在尝试编写一些ruby,它会递归搜索给定目录中的所有空子目录并删除它们.
思考?
注意:如果可能的话,我想要一个脚本版本.这既是实际需要,也是帮助我学习的东西.
kch*_*kch 17
在红宝石中:
Dir['**/*'] \
.select { |d| File.directory? d } \
.select { |d| (Dir.entries(d) - %w[ . .. ]).empty? } \
.each { |d| Dir.rmdir d }
Run Code Online (Sandbox Code Playgroud)
看一下kch,dB的例子.和上面的Vishnu,我已经整理了一个单线程,我认为这是一个更优雅的解决方案:
Dir['**/'].reverse_each { |d| Dir.rmdir d if Dir.entries(d).size == 2 }
Run Code Online (Sandbox Code Playgroud)
我使用'**/'而不是'/**/*'只返回目录的glob,所以我不必测试它是否是一个目录.根据这篇文章,我正在使用reverse_each而不是sort.reverse.each因为它更短,并且据称效率更高.我更喜欢,因为它更容易阅读和理解,但如果必须在Windows上运行脚本,可能会更好.Dir.entries(d).size == 2(Dir.entries(d) - %w[ . .. ]).empty?(Dir.entries(d) - %w[ . .. ]).empty?
我已经在Mac OS X上对它进行了相当多的测试,它运行良好,即使使用递归的空目录也是如此.