1

我目前有一个日志文件(见下文),我需要遍历并提取已扫描文件的列表。然后通过使用该文件列表将扫描的文件复制到不同的目录中。

所以在这种情况下,它将通过并拉取 c:\tools\baregrep.exe c:\tools\baretail.exe 等

然后将它们移动到一个文件夹,比如 c:\folder\SafeFolder 具有相同的文件结构

我希望我有一个失败扫描输出的样本,但这会让我有一个良好的开端,我可能会弄清楚其余的

赛门铁克日志文件图像

在此先感谢,我非常感谢您可以借给我的任何帮助。

4

3 回答 3

1

这个问题被标记为 Java,尽管我很喜欢 Java,但这个问题在 Perl 等语言中会更容易、更快速地解决(所以如果你只想要最终结果而不需要在特定环境,那么您可能希望改用脚本语言)。

不是一个有效的实现,但是 perl 中所需要的代码如下所示:(语法未经测试并且可能按原样破坏,仅作为指导......自从我编写任何 perl 以来已经有一段时间了)。

use File::Copy;
my $outdir = "c:/out/";
while(<>)
{
  my ($path) = /Processing File\s+\'([^\']+)\'/;
  my ($file) = $path =~ /(.*\\)+([^\\]+)/;
  if (($file) && (-e $path))
  {
    copy($path,$outdir . $file);
  }
}
于 2012-01-04T22:37:45.500 回答
0

它直截了当。

  1. 使用 NEW_LINE 作为分隔符逐行读取日志文件。如果这是一个小文件,请随意加载它并通过 String.split("\n") 或 StringTokenizer 处理它

  2. 当你循环每一行时,你需要做一个简单的测试来检测该字符串是否包含“处理文件”。

  3. 如果是这样,请使用正则表达式(更难)或简单解析来捕获文件名。它应该在 ['] 内,因此检测 ['] 的第一次出现,并检测第二次,并获取其间的字符串。

  4. 如果您的字符串有效(您可以使用 java.io.File 进行测试)或存在,您可以将文件名复制到另一个文件。我不建议您不要在 java 中复制它以限制初学者的内存。

  5. 相反,复制文件字符串以形成批处理文件,以使用 Windows BAT 或 Bash 脚本等 OS 脚本立即复制它们,例如 cp 'filename_from' 'copy_to_dir'

让我知道您需要一个工作示例

问候

于 2012-01-04T22:01:30.413 回答
0

这应该可以解决问题。现在,只需适应您的解决方案!

public static void find(String logPath, String safeFolder) throws FileNotFoundException, IOException {
    ArrayList<File> files = new ArrayList<File>();

    BufferedReader br = new BufferedReader(new FileReader(logPath));
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = br.readLine()) != null) {
        Pattern pattern = Pattern.compile("'[a-zA-Z]:\\\\.+?'");
        Matcher matcher = pattern.matcher(line);
        if (matcher.matches()) {
        }
        if (matcher.find()) {
            files.add(new File(matcher.group()));
            System.out.println("Got a new file! " + files.get(files.size() - 1));
        }
    }

    for (File f : files) {
        // Make sure we get a file indeed
        if (f.exists()) {
            if (!f.renameTo(new File(safeFolder, f.getName()))) {
                System.err.println("Unable to move file! " + f);
            }
        } else {
            System.out.println("I got a wrong file! " + f);
        }
    }
}
于 2012-01-04T23:32:36.497 回答