|
|
@ -20,31 +20,34 @@ mfm::dup(const Opts::Dup &opts_) |
|
|
{ |
|
|
{ |
|
|
std::vector<std::filesystem::path> paths; |
|
|
std::vector<std::filesystem::path> paths; |
|
|
|
|
|
|
|
|
|
|
|
paths = opts_.paths; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(fs::is_regular_file(opts_.path)) |
|
|
|
|
|
{ |
|
|
|
|
|
} |
|
|
|
|
|
else if(fs::is_directory(opts_.path)) |
|
|
|
|
|
|
|
|
for(const auto &path : paths) |
|
|
{ |
|
|
{ |
|
|
auto dir_opts = (fs::directory_options::follow_directory_symlink | |
|
|
|
|
|
fs::directory_options::skip_permission_denied); |
|
|
|
|
|
|
|
|
|
|
|
for(const fs::directory_entry &de : |
|
|
|
|
|
fs::recursive_directory_iterator(opts_.path,dir_opts)) |
|
|
|
|
|
|
|
|
if(fs::is_regular_file(opts_.path)) |
|
|
|
|
|
{ |
|
|
|
|
|
} |
|
|
|
|
|
else if(fs::is_directory(opts_.path)) |
|
|
{ |
|
|
{ |
|
|
if(!str::startswith(de.path().filename().string(),".dup_")) |
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
auto dir_opts = (fs::directory_options::follow_directory_symlink | |
|
|
|
|
|
fs::directory_options::skip_permission_denied); |
|
|
|
|
|
|
|
|
for(const auto &de : |
|
|
|
|
|
fs::directory_iterator(de.path().parent_path())) |
|
|
|
|
|
|
|
|
for(const fs::directory_entry &de : |
|
|
|
|
|
fs::recursive_directory_iterator(opts_.path,dir_opts)) |
|
|
{ |
|
|
{ |
|
|
fmt::println("{}",de.path().filename().string()); |
|
|
|
|
|
|
|
|
if(!str::startswith(de.path().filename().string(),".dup_")) |
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
|
|
for(const auto &de : |
|
|
|
|
|
fs::directory_iterator(de.path().parent_path())) |
|
|
|
|
|
{ |
|
|
|
|
|
fmt::println("{}",de.path().filename().string()); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
throw std::runtime_error("invalid file type"); |
|
|
|
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
throw std::runtime_error("invalid file type"); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |