aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-203/shawn-wagner/racket/ch-2.rkt19
1 files changed, 19 insertions, 0 deletions
diff --git a/challenge-203/shawn-wagner/racket/ch-2.rkt b/challenge-203/shawn-wagner/racket/ch-2.rkt
new file mode 100644
index 0000000000..23f245fde7
--- /dev/null
+++ b/challenge-203/shawn-wagner/racket/ch-2.rkt
@@ -0,0 +1,19 @@
+#lang racket/base
+
+(require racket/file racket/list)
+
+(define (copy-directory-tree source target)
+ (let* ([source (string->path source)]
+ [target (string->path target)]
+ [source-component-length (length (explode-path source))]
+ [targets
+ (fold-files
+ (lambda (path type paths)
+ (if (eq? type 'dir)
+ (cons (apply build-path target (drop (explode-path path) source-component-length)) paths)
+ paths))
+ '()
+ source)])
+ (for-each make-directory* targets)))
+
+(copy-directory-tree "a/b/c" "x/y")