walk_a_dir_recursively.sf 536 B

1234567891011121314151617181920212223242526272829
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Walk_a_directory/Recursively
  4. #
  5. func traverse(Block callback, Dir dir) {
  6. dir.open(\var dir_h) || return nil;
  7. dir_h.entries.each { |entry|
  8. if (entry.is_a(Dir)) {
  9. traverse(callback, entry);
  10. } else {
  11. callback(entry);
  12. }
  13. }
  14. }
  15. var dir = Dir.cwd;
  16. var pattern = /sierpinski/; # display files that contain 'sierpinski'
  17. traverse(
  18. { |file|
  19. if (file.basename ~~ pattern) {
  20. say file;
  21. }
  22. } => dir
  23. );