下面是我正在尝试的代码:
{
echo "Enter dirname and hit Return"
read input1
echo "Enter a pattern to be searched for in the current directory"
read input2
find /*/${input1}/*/logs/*/*/*/* -name '*.gz' -exec sh -c 'gzip -cd "$0" | grep -- "${input2}"' {} \;
}
虽然 input1 匹配,但 input2 似乎不匹配,并且我获得了 input1 的所有输出,但没有让 input2 与之匹配。
目的是读取所有.gz文件并获取关键字input2匹配。
答案1
调用的“内部”脚本find
无权访问该$input2
变量。
你可以这样做
find /*/"$input1"/*/logs/*/*/*/* -name '*.gz' \
-exec sh -c 'gzip -cd "$1" | grep -e "$0"' "$input2" {} \;
这会将 的值传递$input2
到内部脚本中,并使其可用,$0
而文件名参数将为$1
。
或者,只需解find
压缩文件并过滤find
整个输出:
find /*/"$input1"/*/logs/*/*/*/* -name '*.gz' \
-exec gzip -cd {} + | grep -e "$input2"
由于find
已经进入给定顶级目录的所有子目录,您可能可以省略一些文件名 glob 并改为使用-mindepth 4
(如果您find
支持此选项),并添加-type f
以表明您只对常规文件感兴趣:
find /*/"$input1"/*/logs -mindepth 4 -type f -name '*.gz' \
-exec gzip -cd {} + | grep -e "$input2"