2015-11-25 3 views
1

Есть ли библиотека, которая позволяет мне копировать каталог и все подкаталоги в Clojure? Что-то вроде:Как скопировать каталог в Clojure?

(copy "source-dir" "destination-dir")

+0

Почему минус голоса? – Zubair

+1

Используйте рекурсию, Люк. Downvote - моя, так как вопрос не показывает никаких усилий, направленных на решение проблемы. Чтобы скопировать каталог, вы рекурсивно скопируете его по файлу. – zerkms

+2

Да, я знаю это, но мне нравится снова использовать код прежде, чем я изобретаю колесо, названное DRY – Zubair

ответ

3

Вы можете использовать следующий код для copy-dir:

копировать-Dir (копия-Dir от)

Копирование каталогов из from до to. Если to уже существует, скопируйте каталог в каталог с тем же именем как from в каталоге to.

(defn copy-dir 
    "Copy a directory from `from` to `to`. If `to` already exists, copy the directory 
    to a directory with the same name as `from` within the `to` directory." 
    [from to] 
    (when (exists? from) 
    (if (file? to) 
     (throw (IllegalArgumentException. (str to " is a file"))) 
     (let [from (file from) 
      to (if (exists? to) 
       (file to (base-name from)) 
       (file to)) 
      trim-size (-> from str count inc) 
      dest #(file to (subs (str %) trim-size))] 
     (mkdirs to) 
     (dorun 
     (walk (fn [root dirs files] 
       (doseq [dir dirs] 
        (when-not (directory? dir) 
        (-> root (file dir) dest mkdirs))) 
       (doseq [f files] 
        (copy+ (file root f) (dest (file root f))))) 
       from)) 
     to)))) 

Или напрямую использовать имеющиеся fs library на Github.

+2

@ Zubair запрашивает библиотеки явно вне темы по http://stackoverflow.com/help/on-topic – developerbmw

+0

@developerbmw Тогда, пожалуйста, проголосуйте, чтобы закрыть это вопрос, то есть ваше право – Zubair

+0

@developerbmw Я подтвердил ваш комментарий, показывающий ссылку переполнения стека. Если бы вы заявили, что в первую очередь я бы понял, поэтому спасибо за это – Zubair

Смежные вопросы