查找文件并仅获取目录路径

查找文件并仅获取目录路径

我试图查找文件,然后查找grep文件中某些字符串的表达式,然后仅获取文件所在的完整目录路径。

find `pwd` -iname '*.py' -type f -exec bash -c "grep -l 'nn'; sed 's[\/](.*)*[\/]/d' {}" \; 

但是,该sed表达式会导致终端挂起,而不是递归地打印出文件并从目录路径中删除文件。

我可以通过以下方式部分实现这一目标:

find `pwd` -iname 'nn*' -type d

但是,这期望目录名称具有nn而不是nn文件内部的名称。

答案1

如果您希望路径包含文件名:

shopt -s globstar
grep -l 'nn' **/*.py | xargs realpath

仅获取匹配文件所在的目录:


```bash
shopt -s globstar
grep -l 'nn' **/*.py | xargs realpath | xargs dirname

要删除重复的目录名称:

shopt -s globstar
grep -l 'nn' **/*.py | xargs realpath | xargs dirname | sort -u

如果您有很多.py文件,您可能会收到“参数列表太长”错误。

在这种情况下,使用 find 作为:

find `pwd` -iname '*.py' | xargs grep -l 'nn' | xargs dirname | sort -u

以上所有内容均假设路径中没有换行符的目录。如果路径中可能存在换行符,请添加注释,我将添加更多解决方案。

相关内容