我正在编写一个旨在自动完成一些变量的脚本,我正在寻求帮助以实现这一目标:
我有一个启用了Nginx站点的文件夹,其中包含一些反向代理站点。 我需要:
非常感谢您的关注和帮助!
我找到了一些行,但是没有人尝试文件夹中的任何文件
if grep -q $var1 "/volume1/nginx/sites-enabled/testfile"; then
echo "found"
fi
答案 0 :(得分:0)
此命令是最传统,最有效的命令,可在任何Unix上运行 不需要具有特殊功能的GNU版本的grep。
效率是,xargs会根据系统限制(shell命令可能有多长时间)为grep命令提供尽可能多的文件名作为参数,并以此至少执行grep命令。可能。
使用grep的-l选项,在成功进行模式搜索后,仅显示一次文件名。
find /path -type f -print | xargs grep -l pattern
答案 1 :(得分:0)
假设您具有GNU Grep,它将把包含$var1
内容的所有文件存储在array $var2
中。
for file in /volume1/nginx/sites-enabled/*
do
if grep --fixed-strings --quiet "$var1" "$file"
then
var2+=("$file")
fi
done
这将循环通过NUL分隔的路径:
while IFS= read -d'' -r -u9 path
do
…something with "$path"
done 9< <(grep --fixed-strings --files-without-match --recursive "$var1" /volume1/nginx/sites-enabled)
答案 2 :(得分:0)
find
和grep
可用于生成匹配文件的列表:
find /volume1/nginx/sites-enabled/ -type f -exec grep -le "${var1}" {} +
“技巧”正在使用find
的{{1}}和-exec
的{{1}}。
如果只希望使用文件名,则可以使用:
grep
如果要将结果分配给变量,请使用命令替换(-l
):
find /volume1/nginx/sites-enabled/ -type f -exec grep -qe "${var1}" {} \; -exec basename {} \;
别忘了引用您的变量!