REBOL [ Title: "X ls -R" Date: 30-Jul-2002 Version: 1.0.1 File: %xlsr.r Author: "Gregory Pecheret" Purpose: {Provide a template to exectute a function on all files found recursively from a directory} Email: gregory.pecheret@free.fr library: [ level: none platform: none type: [Tool function] domain: [files file-handling] tested-under: none support: none license: none see-also: none ] ] xlsr!: make object! [ ; use this field to set a filter on extension ("java", "cpp", "png", ...) extension: none ; default methode to rewrite unless you just want to do what it does execute: func [f [file!]] [print f] scan-files: func [directory [file!] /local scan-result scan-elt is-dir] [ either error? try [scan-result: read directory] [ print rejoin ["problem reading directory " directory] ] [ foreach scan-elt scan-result [ is-dir: false if error? try [ is-dir: dir? to-file rejoin[directory scan-elt] ] [ print rejoin ["problem testing " directory scan-elt] ] either is-dir [ scan-files rejoin [directory scan-elt] ] [ if any [not extension extension = last parse/all scan-elt "."] [ execute rejoin [directory scan-elt] ] ] ] ] ] ] { ; simple sample xlsr!/scan-files %.. ; sample to print java files print-java: make xlsr! [ extension: "java" execute: func [f [file!]] [print read f] ] print-java/scan-files %. }