В настоящее время у меня есть скрипт, который копирует файлы из исходного каталога в целевой каталог с помощью включений и исключений регулярных выражений, однако, когда путь содержит круглые скобки, файл не будет копироваться.
Сначала я думал, что проблемабыло с тем, как источник и цель читались с тех пор (это специальный символ, для борьбы с которым я пытался заменить (на экранированный (, но я, возможно, делал эту часть неправильно.
import groovy.io.FileType
import java.nio.file.*
String Source = 'C:/temp/file(s)'
String Target = 'C:/newTemp/file(s)'
String InclusionsRegexes = "garbage.txt"
String ExclusionsRegexes = ""
class RegexInfo
{
private String AllRegexes = "";
public RegexInfo(String RegexString, String RegexType, String Source)
{
if(RegexString != null)
{
def RegexArray = RegexString.split(",");
for(item in RegexArray)
{
String fullRegexPath = Source + "/" + item;
if(AllRegexes != null && !AllRegexes.isAllWhitespace())
{
//Add regex value for Or
AllRegexes += "|";
}
AllRegexes += fullRegexPath;
}
}
}
public String getAllRegexes() { return this.AllRegexes; }
}
IncludesRegexInfo = new RegexInfo(InclusionsRegexes, "inclusion", Source);
ExcludesRegexInfo = new RegexInfo(ExclusionsRegexes, "exclusion", Source);
File SourceDirToCopy = new File(Source);
SourceDirToCopy.eachFileRecurse()
{
SourceFile ->
String SourceFilePath = SourceFile.toString().replaceAll("\\\\","/");
if(SourceFile.isDirectory())
{
SourceFilePath += "/"
}
if(SourceFilePath.matches(IncludesRegexInfo.getAllRegexes()) && !SourceFilePath.matches(ExcludesRegexInfo.getAllRegexes()))
{
File TargetFile = new File(SourceFilePath.replace(Source, Target))
String TargetFilePath = TargetFile.toString().replaceAll("\\\\", "/");
if(!TargetFile.getParentFile().exists())
{
TargetFile.getParentFile().mkdirs()
}
Files.copy(SourceFile.toPath(), TargetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
}
}
Ошибки, которые я получал, были либо непредвиденными символами, либо файл не перемещался без ошибки.