【问题标题】:find with escaped glob expansion works on command line; not in Java Runtime.exec在命令行上使用转义的 glob 扩展查找;不在 Java Runtime.exec 中
【发布时间】:2014-06-24 20:16:38
【问题描述】:

我正在运行这个命令:

find /tmp/thumbnailgenerator/processor -maxdepth 1 -amin +1 -type f -iname 'a*' -delete

从命令行运行时按预期工作。但是当通过Runtime.getRuntime.exec(String command) 在Java 中作为单个命令运行时,文件不会被删除。 (是的,它们是一分钟前的。)此外,当作为通过StringUtils.join(cmdarray, ' ') 连接到上述字符串的命令数组cmdarray 运行时,它仍然不起作用。

我怀疑这与全局扩展有关,因为我知道使用 Runtime.exec 的一个常见错误是假设它像 bash 那样进行全局扩展,但删除 * 没有帮助(它仍然不会删除文件a)。

【问题讨论】:

    标签: java bash find exec glob


    【解决方案1】:

    这与 bash v. exec 执行第一轮处理的方式有关,但不完全是 glob 扩展。删除文件名周围的' ',它应该可以工作。在 bash 中,您使用这些引号来防止 bash 扩展 glob。但是单引号对 exec 也没有特殊含义,因此它们也被原始传递给 find 命令。你想找看a*。在 bash 中,这意味着您必须输入 'a*'。但是在 exec 中,这意味着你必须输入 a* 否则 find 会看到 'a*'

    【讨论】:

    • ...它应该工作吗?您发布了问题和答案但没有进行测试?
    • @AlexandreSantos 确实有效。我不想傲慢地假设每个阅读此解决方案的人都不会做任何其他错误。
    猜你喜欢
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多