gpt4 book ai didi

linux - 我将如何 chown grep 找到的所有内容

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:10 25 4
gpt4 key购买 nike

我希望对所有包含单词“hi”的文件进行 chown

我现在有

grep -r $1 $2
if [ $? -eq 0 ]; then
echo "Found text"
echo $match
echo "start"

输入为 ./test.sh "hi"*

我能够获取包含 hi 的所有文件,但是当我尝试 chown 时,我不确定要用管道放置什么我知道您可以将变量传递给下一个参数,例如;

grep -r $1 $2 | chown user1:root *

但这似乎只是对整个目录进行操作,这不是我想要的。

关于通过此阅读或调查的内容有什么建议吗?

最佳答案

您正在寻找 xargs 命令。它从标准输入中读取一系列字符串,并将它们转换为指定命令的参数。例如:

grep -r --files-with-matches $1 $2 | xargs chown user1:root

更新:

评论者提出了加强上述命令的技术,这确实是一个好主意。由于 $1$2 是脚本的命令行参数,一般来说,您不能确信它们不包含空格或其他会改变含义的字符命令。因此,引用它们是个好主意。此外,如果任何文件名包含空格——包括包含路径段中的任何目录名——那么除非你帮助它,否则 xargs 将误解结果。下面是一个版本的管道,可以更有效地应对此类问题:

grep -rlZ "$1" "$2" | xargs -0 chown user1:root

此版本依赖于 grepxargs 的 GNU 扩展。 -Z 选项导致 grep 使用零值字符而不是换行符分隔输出“行”,并且 -0 参数to xargs 告诉它相应地解释传入的数据。该字符具有在 Unix 文件名中不允许使用的独特区别。

grep-l 选项(小写 L,不是数字 1)是 GNU 的 --with-file-names< 的缩写形式 选项;任何符合 POSIX 标准的 grep 都支持短格式。为了完整性和简洁性,我在这里展示它。

关于linux - 我将如何 chown grep 找到的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35416668/

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