diff --git a/src/tasks/internal/cp_task.cpp b/src/tasks/internal/cp_task.cpp index a209e6c6..9d643d80 100644 --- a/src/tasks/internal/cp_task.cpp +++ b/src/tasks/internal/cp_task.cpp @@ -1,5 +1,6 @@ #include "cp_task.h" #include +#include "helpers/filesystem.h" #define BOOST_FILESYSTEM_NO_DEPRECATED #define BOOST_NO_CXX11_SCOPED_ENUMS @@ -96,12 +97,16 @@ std::shared_ptr cp_task::run() for (fs::directory_iterator item(base_dir); item != end_itr; ++item) { if (regex_match(item->path().filename().string(), pattern)) { auto target = output_is_dir ? (output / item->path().filename()) : output; - boost::system::error_code error_code; - fs::copy(item->path(), target, error_code); - if (error_code.value() != boost::system::errc::success) { - result->status = task_status::FAILED; - result->error_message = std::string("Cannot copy files. Error: ") + error_code.message(); - break; + if (fs::is_directory(item->path())) { + helpers::copy_directory(item->path(), target); + } else { + boost::system::error_code error_code; + fs::copy(item->path(), target, error_code); + if (error_code.value() != boost::system::errc::success) { + result->status = task_status::FAILED; + result->error_message = std::string("Cannot copy files. Error: ") + error_code.message(); + break; + } } } }