(define-module (com simatime caplinks) #:use-module ((ice-9 popen) #:prefix popen/) #:use-module ((com simatime string) #:prefix string/) #:use-module ((com simatime shell) #:prefix sh/) #:export (main get-all-nodes make-symlink)) ;; given a root directory, walk the tree and get a list of all the files. Then, ;; for each file, symlink a capitalized version (define (main args) (let* ((root (cadr args)) (files (get-all-nodes root))) (for-each (lambda (file) (display file) (move-file file (capitalize-file file))) files) (display root) (newline) (display "done moving files") (newline) (newline))) (define (get-all-nodes root) (filter (lambda (s) (not (equal? "" s))) (string-split (sh/stream (format #f "find ~a -name '*.hs*'" root)) #\newline))) (define (capitalize-file file) (string-join (map string/capitalize (string-split file #\/)) "/")) (define (butlast ls) (let ((len (length ls))) (list-head ls (- len 1)))) (define (dir-for f) (string-join (butlast (string-split f #\/)) "/")) (define (move-file here there) (display (format #f "~a -> ~a" here there)) (newline) ;; make the directory tree for the link, if it doesn't already exist (system (format #f "mkdir -p ~a" (dir-for there))) (system (format #f "mv ~a ~a" here there)))