![递归搜索包含某些特定文本的文件](https://linux22.com/image/1262533/%E9%80%92%E5%BD%92%E6%90%9C%E7%B4%A2%E5%8C%85%E5%90%AB%E6%9F%90%E4%BA%9B%E7%89%B9%E5%AE%9A%E6%96%87%E6%9C%AC%E7%9A%84%E6%96%87%E4%BB%B6.png)
如何递归生成一个文本文件,其中包含我的服务器上所有在文件中任何位置包含特定字符串的文件的列表?
我知道以下命令可用于递归替换字符串
find /var/www -type f -print0 | xargs -0 sed -i 's/old string/new string/g'
我不想替换该字符串,我只想要包含该字符串的所有文件的列表。
答案1
使用grep
而不是sed
:
find /var/www -type f -print0 | xargs -0 grep -i 'old string'
从你提出问题的方式来看,你似乎还不太熟悉。在命令行中,grep
在其手册页类型中阅读有关其选项的更多信息: 。man grep
更新以回答评论-- 尝试添加-l
仅显示文件名的选项。这-i
使得搜索不区分大小写。使用两个选项的简单方法是使用单个破折号:grep -il
答案2
您也可以单独使用 grep 而不使用 find:
grep -Rli 'old string' /var/www > list_of_files
答案3
您可以尝试在命令中添加 -l 标志以仅列出文件名
find /var/www -type f -print0 | xargs -0 grep -li 'old string'
答案4
尝试 ack——它比 grep 更快并且支持 perl 正则表达式。
ack -la <pattern> /var/www
在某些系统上,这个包被称为“ack”,有时也被称为“ack-grep”。