1

我正在寻找一个简单的 bash 命令来在文件名、目录名和所有文件的文本中搜索短语。它应该返回文件和目录的列表。理想情况下,我希望可以选择将其通过管道传输到 > myfiles.txt 之类的文件中

就像是:

find 'my key phrase'
find 'my key phrase' > mylist.txt

会返回:

/home/stuff/filewithmykeyphraseinit.txt
/home/stuff/a filename with my key phrase.doc
/home/stuff/a directory with my key phrase/another subdirectory/

编辑: 我收到了很多我目前正在测试的好建议。一个问题:有没有办法让这些不区分大小写?我相信将 -i 添加到 grep 有效。查找文件路径/名称怎么样?另外,我希望可以选择将输出发送到文本文件或屏幕。

4

3 回答 3

4
{ find . -name '*my key phrase*' ;
  grep -rl 'my key phrase' .     ;
} | sort -u > mylist.txt
于 2012-10-12T18:48:17.920 回答
1

您快到了,只需指定要匹配文件名并将通配符添加到您的模式:

find -name '*my key phrase*' > mylist.txt

要在文件内容中搜索,请使用 grep 命令(带有-r递归选项或 rgrep):

rgrep -l 'my key phrase' >> mylist.txt
于 2012-10-12T18:41:36.580 回答
0

一个命令完成所有操作(使用 xargs 和 bash)

find | xargs -I {} bash -c '(([[ -f "{}" ]] && grep -l "my key phrase" "{}") || ([[ "{}" =~ "my key phrase" ]] && echo {}))'
于 2012-10-12T19:09:17.720 回答