Linux递归查找具有给定字符串的文件名[重复]
Posted
技术标签:
【中文标题】Linux递归查找具有给定字符串的文件名[重复]【英文标题】:Linux find file names with given string recursively [duplicate] 【发布时间】:2012-10-19 07:45:53 【问题描述】:我在 Ubuntu 上,我想在当前目录和子目录中查找名称包含字符串“John”的所有文件。我知道grep
可以匹配文件的内容,但我不知道如何将它与文件名一起使用。
【问题讨论】:
【参考方案1】:使用find 命令,
find . -type f -name "*John*"
【讨论】:
使用#!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi
创建自定义 bash 脚本可以让您以完美的快捷方式运行 F search-string
@IliaRostovtsev - 不错,但[ -z "$1" ]
会好一点。
@Joe 啊,对。你的意思是如果路径有空格?但是在这里我们只检查是否存在 $1 空间会使 $2 出现,仅此而已。你的意思是理论上更好,对吧?
@IliaRostovtsev - 实际上,我错了。如果 $1 为空,则测试变为 if [ -z ]
。我认为这将是一个语法错误,但它有效。从现在开始,我可以简化一些代码。【参考方案2】:
使用 ack 很简单。
只需输入ack <string to be searched>
【讨论】:
这似乎还将包括所有包含搜索文本的路径,而不仅仅是文件:***.com/questions/7698867/…【参考方案3】:find
命令会花费很长时间,因为它会扫描文件系统中的真实文件。
最快的方法是使用locate
命令,它会立即给出结果:
locate "John"
如果没有找到该命令,则需要先安装mlocate
包并运行updatedb
命令,以准备第一次搜索数据库。
更多细节在这里:https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab
【讨论】:
【参考方案4】:这是一个非常简单的解决方案,在您要搜索的目录中使用tree
命令。 -f
显示完整的文件路径,|
用于将 tree 的输出通过管道传输到 grep
以查找名称中包含字符串 filename
的文件。
tree -f | grep filename
【讨论】:
以上是关于Linux递归查找具有给定字符串的文件名[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何递归地查找具有文本模式的文件,不包括某些目录和文件[重复]