查找在特定文件中找到文本的目录

  • 本文关键字:文本 文件 查找 linux sh
  • 更新时间 :
  • 英文 :


如何找到在特定文件中找到文本的目录?例:我想获得"/var/www/"中的所有目录。包含文字" food -bundle"在composer.json文件中。我已经有一个这样的命令了:

find ./ -maxdepth 2 -type f -print | grep -i 'composer.json' | xargs grep -i '"foo-bundle"'

然而,我想做一个sh脚本,得到所有这些目录和做的事情与他们。任何想法?

find

您当前的命令几乎在那里,而不是使用xargsgrep,让:

  1. grep移动到-exec
  2. 使用xargs将结果传递给dirname以只显示父文件夹
find ./ -maxdepth 2 -type f -exec grep -l "foo-bundle" {} /dev/null ; | xargs dirname

如果你只想搜索composer.json文件,我们可以包括-iname选项,像这样:

find ./ -maxdepth 2 -type f -iname '*composer.json' -exec grep -l "foo-bundle" {} /dev/null ; | xargs dirname

如果| xargs dirname不能提供足够的数据,我们可以扩展它,这样我们就可以使用while read循环find的结果,如下所示:

find ./ -maxdepth 2 -type f -iname '*composer.json' -exec grep -l "foo-bundle" {} /dev/null ; | while read -r line ; do
parent="$(dirname ${line%%:*})"
echo "$parent"
done

grep h1> 们可以使用grep来搜索包含特定文本的所有文件。

在每一行循环之后,我们可以

  1. 移除:后面获取文件路径
  2. 使用dirname获取父文件夹路径

考虑这个文件设置,/test/b/composer.json包含foo-bundle

➜  /tmp tree
.
├── test
│   ├── a
│   │   └── composer.json
│   └── b
│       └── composer.json
└── test.sh

运行以下test.sh时:

#!/bin/bash
grep -rw '/tmp/test' --include '*composer.json' -e 'foo-bundle' | while read -r line ; do
parent="$(dirname ${line%:*})"
echo "$parent"
done

结果如预期的那样,文件夹b的路径:

/tmp/test/b

要查找包含特定文本段的所有文件,可以使用:

find ./ -maxdepth 2 -type f -exec grep -l "composer.json" {} /dev/null ;

结果是一个文件名列表。现在您需要做的就是找到一种方法,在所有这些服务器上启动命令dirname。(我尝试使用一个简单的管道,但这将是太容易了:-))

感谢@0stone0的引领。我终于得到了它:

#!/bin/sh
find /var/www -maxdepth 2 -type f -print | grep -i 'composer.json' | xargs grep -i 'foo-bundle' | while read -r line ; do
parent="$(dirname ${line%%:*})"
echo "$parent"
done

相关内容

  • 没有找到相关文章

最新更新