我是使用 Pentaho Spoon 的新手。我在一个文件夹中有大约 100 个文本文件,它们都没有文件扩展名。我发现如果我创建一个作业并一次移动一个文件,我可以简单地重命名该文件,在末尾添加一个 .txt 扩展名。我想做的是创建一个工作,通过并重命名每个文件并添加 .txt 扩展名。我试过使用正则表达式,但似乎无法让它工作,因为没有文件扩展名。任何帮助将不胜感激。
3 回答
这是一个非常简单的解决方案,但您需要使用转换,因为作业步骤不会这样做,好吗?
您需要以下步骤:
获取文件名:只需添加您的文件夹和正则表达式“.*”(不带双引号),所有内容都会列出。检查是否可以使用“显示文件名...”按钮。
修改后的 Java 脚本值:声明一个连接所需扩展名的 new_filename var。添加脚本后记得单击“获取变量”以输出新字段。
var new_filename = filename + '.txt';
处理文件:选择 Operation = Move 和 filename/new_filename 作为源/目标文件名。
就是这样!
重命名一组文件是我不会使用 Kettle 的一件事。为什么不让外壳做外壳最擅长的事情呢?
rem example for Windows CMD shell
ren absolute-path-to-folder\*. *.txt
如果您完全有理由在 Kettle 中执行此操作,则可以使用 Shell 作业条目来完成此操作。
我以前见过“只使用 shell 脚本”的答案。如果您可以保证您的 Kettle 服务器与开发人员工作站在同一操作系统上,则效果很好。我在一个 Dev/Spoon 实例是 Windows,但 Prod/Kettle 环境是 Linux 的环境中,所以你不能编写一个脚本文件来统治它们。
至于“你到底为什么要这样做?”,我的场景是一个集成场景。我们使用 Pentaho 进行数据集成,但它是用于企业集成的不同工具。我想要一个 Pentaho Job 来生成一个输出文件,并且我想要我的 Enterprise Integration 工具获取该文件并对其进行处理,但不是在 Pentaho 完成写入文件之前。当企业集成解决方案识别出文件存在时,重命名有助于避免竞争条件,但 Pentaho 尚未完成编写它。
如果我可以重命名一组文件,例如 change from test. .csv.processing 进行测试。.csv,然后 Pentaho 将最初使用 .processing 扩展名创建文件,然后在完成后删除扩展名。正在寻找 test.*.csv 的企业集成解决方案在 Pentaho 重命名文件之前不会开始处理该文件。宾果游戏,没有比赛条件。