diff --git a/src/helpers/filesystem.cpp b/src/helpers/filesystem.cpp index a1033408..b986e40d 100644 --- a/src/helpers/filesystem.cpp +++ b/src/helpers/filesystem.cpp @@ -7,7 +7,7 @@ void helpers::copy_directory(const fs::path &src, const fs::path &dest) if (!fs::exists(src)) { throw filesystem_exception( "helpers::copy_directory: Source directory does not exist '" + src.string() + "'"); - } else if (!fs::is_directory(src)) { + } else if (!fs::is_directory(fs::symlink_status(src))) { throw filesystem_exception( "helpers::copy_directory: Source directory is not a directory '" + src.string() + "'"); } else if (!fs::exists(dest) && !fs::create_directories(dest)) { @@ -17,7 +17,7 @@ void helpers::copy_directory(const fs::path &src, const fs::path &dest) fs::directory_iterator endit; for (fs::directory_iterator it(src); it != endit; ++it) { - if (fs::is_directory(it->status())) { + if (fs::is_directory(it->symlink_status())) { helpers::copy_directory(it->path(), dest / it->path().filename()); } else { fs::copy(it->path(), dest / it->path().filename()); diff --git a/src/tasks/internal/cp_task.cpp b/src/tasks/internal/cp_task.cpp index 0e82c7fe..97a305c9 100644 --- a/src/tasks/internal/cp_task.cpp +++ b/src/tasks/internal/cp_task.cpp @@ -44,7 +44,7 @@ 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; - if (fs::is_directory(item->path())) { + if (fs::is_directory(fs::symlink_status(item->path()))) { helpers::copy_directory(item->path(), target); } else { boost::system::error_code error_code;