gpt4 book ai didi

bash - 有没有办法在带有选项 exec 的查找命令中使用 If 条件?

转载 作者:行者123 更新时间:2023-11-29 09:39:50 25 4
gpt4 key购买 nike

场景:一个文件夹中有多个文件,我试图找到一组特定的文件,如果给定的文件有特定的信息,那么我需要 grep 信息。

例如:

find /abc/test \( -type f -name 'tst*.txt' -mtime -1 \) -exec grep -Po '(?<type1).*(?=type1|(?<=type2).*(?=type2)' {} \;

我需要包括 if 条件和 find -exec(如果 grep 为真则打印上面的内容)

if grep -q 'case=1' <filename>; then
grep -Po '(?<type1).*(?=type1|(?<=type2).*(?=type2)'
fi

谢谢

最佳答案

您可以在 find 中使用 -exec 作为条件——如果命令返回成功的退出代码,则文件匹配。所以你可以这样写:

find /abc/test -type f -name 'tst*.txt' -mtime -1 -exec grep -q 'case=1' {} \; -exec grep -Po '(?<type1).*(?=type1|(?<=type2).*(?=type2)' {} \;

find 中的测试是从左到右求值的,因此第二个 grep 只有在第一个成功时才会执行。

如果你的情况比较复杂,可以把整个shell代码写成一个脚本,用-exec来执行脚本。例如。把它放在 myscript.sh 中:

#!/bin/sh
if grep -q 'case=1' "$1"; then
grep -Po '(?<type1).*(?=type1|(?<=type2).*(?=type2)' "$1";
fi

然后做:

find /abc/test -type f -name 'tst*.txt' -mtime -1 -exec ./myscript.sh {} \;

关于bash - 有没有办法在带有选项 exec 的查找命令中使用 If 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36899668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com