我写了一个查找函数,可以在给定路径中的每个文件中搜索字符串,同时跳过我不想要搜索的目录名称列表。我将这个脚本放在我的.bashrc文件中,以便像这样调用:
findTEXTinFILES /path/to/search 'text-to-find'
查找部分功能很好,并且它会对搜索文本进行颜色标记,使其在视觉上突出显示!但是我无法让它跳过使用-prune列出的目录。我已经阅读了所有我能找到的帖子,但没有一个适用于我。我尝试了多种变化也没有成功。所以我有几个问题:
- 如何跳过多个目录?
- 如何跳过仅具有部分名称的目录,例如以“--”或“wp-”开头的目录?
- 您可以在同一脚本中混合使用
-name
和-path
条件吗? - 我还错过了什么吗?
我的服务器是CENTOS 6.9 virtuozzo,使用bash shell。
function findTEXTinFILES {
find "$1" ! \( -name .bash_history -prune \
-o ! -path tmp -prune \
-o ! -path short -prune \
-o ! -path "*/_not_used/*" -prune \
-o ! -path backups -prune \
-o ! -path temp_logs -prune \
-o ! -name .cpan -prune \
-o ! -name .cpobjcache -prune \
-o ! -path files_to_compare -prune \
-o ! -path logs -prune \
-o ! -path mail -prune \
-o ! -path old -prune \
-o ! -path '--*' -prune \
-o ! -path 'wp-*' -prune \
-o ! -path '*copy*' -prune \) \
-o -name "*" \
-exec grep $2 -I --color -Hn '$3' '{}' 2>/dev/null \;
}