完全的 Linux 新手,需要命令帮助来查找文件名、列出它们各自的路径,然后仅通过包含特定子字符串的路径进一步过滤结果集。
例如,我有一个文件名标识为someFile.txt
.该文件名可以存在于多个目录中:
例如/some/directory/path/good/someFile.txt
和/some/directory/path/bad/someFile.txt
使用 find 我可以返回包含该文件的所有路径的列表,但我也想返回路径名中仅包含“good”的路径。此示例中的白名单是更可取的,因为有许多变量路径名,但我知道包含术语“好”的路径名是可以接受的。
这就是我所拥有的有效方法:
$ find . -type f \( -name someFile1.txt -o -name someFile2.txt\)
我也尝试过以下方法但无济于事:
$ find . -type f \(-name someFile1.txt -o -name someFile2.txt\) -print0 | xargs -0 grep -rl 'good'
$ find . -type f \(-name someFile.txt .... | xargs -0 grep 'good'
$ find . -type f \(-name someFile.txt .... | xargs -0 egrep 'good|real_good'
答案1
使用-path
测试find
:
find . -path '*/good/*' -type f \( -name someFile1.txt -o -name someFile2.txt \)
该-path
测试的工作方式类似于,但该模式是针对当前正在考虑的-name
任何文件的完整路径名进行测试的。find
我使用上面测试的方式将确保仅返回具有名称someFile1.txt
或someFile1.txt
位于名为 的目录下某处的文件。good
find
如果文件应该驻留在good
目录中,而不是位于其下的子目录中,则使用
find . -type f \( -path '*/good/someFile1.txt' -o -path '*/good/someFile2.txt' \)
或类似的东西。
显然,如果您正在寻找名为someFile1.txt
和 的实际文件someFile2.txt
,您将使用该模式someFile[12].txt
而不是两个单独的测试。
从评论中,很明显您可能想要使用
find . -type f \
\( -ipath '*realgood*' -o -ipath '*real_good*' \) \
\( -name someFile1.txt -o -name someFile2.txt \)