“Find”输出作为 Bash 中“for”的范围以批处理模式执行

“Find”输出作为 Bash 中“for”的范围以批处理模式执行

我在 Linux mint 上使用 Bash 命令做了一个循环过程for,输入范围来自上一个过程来自find,但它显然是在相对于终端输出的批处理过程中完成的,而不是在范围find明确的情况下直接进行的并执行以给出终端输出。我的是;

IFS=$'\n'
for s in $(find ~+ -type f -regextype posix-extended -iregex ".*/data\.(tmp|bak)" -printf '%p\n')
    {
    echo $s
    }

它将在 100 秒内静止无任何输出。或更多,而不是直接在终端上显示一些。如何让它像find单独直接指示的那样快速工作?提前致谢,我很感激。

答案1

一个for循环迭代一个静止的列表,总是。因此,在完全指定要迭代的项目之前,问题中的循环体不会开始执行。在find命令执行完成之前,这些不会被完全指定。

您的命令存在几个问题,大多数问题都可以通过问题“解决”为什么循环查找的输出是不好的做法?”。

一般来说,最好充当find内部脚本的路径名生成器:

find ~+ -type f \( -iname data.tmp -o -iname data.bak \) -exec sh -c '
    for pathname do
        # process "$pathname" here
    done' sh {} +

这样,您无需关心find提供给循环的路径名如何分隔(这将优雅地处理包含空格和换行符等的路径名)

有关的:

相关内容