查找命令只搜索非隐藏目录

8
在下面的命令中,我想仅搜索非隐藏目录,如何在使用以下命令时实现此目的。我想在搜索日志文件时忽略隐藏的目录。
      find /home/tom/project/ -name '.log.txt'


   ls /home/tom/project/
   dir1
   dir2
   .backup
   .snapshot/
   .ignore/

你的意思是指那些既不是隐藏的,也没有隐藏父目录的目录吗? - Ciro Santilli OurBigBook.com
2个回答

4

尝试

find /home/tom/project -type d -name '.*' -prune -o -name .log.txt -print

无法使用find . -name '.*' -prune -o -print(需要一些正则表达式...) - milahu

2
这将会查找所有文件,但会忽略以点号开头的文件,也就是隐藏文件。
find /home/tom/project/ -type f \( -iname ".log.txt" ! -iname ".*" \)

编辑: 如果上述方法无效,可以尝试使用以下代码。它包含更好的正则表达式。
find /home/tom/project/ \( ! -regex '.*/\..*' \) -type f -name ".log.txt"

编辑2:

以下内容将排除隐藏文件夹,但会搜索具有所需模式的隐藏文件:

find /home/tom/project/ \( ! -regex '.*/\..*/..*' \) -type f -name ".log.txt"

编辑3:

使用grep命令解决问题 :) 如果这个方法行不通,我就束手无策了 :)

find /home/tom/project/ \( ! -regex '.*/\..*/..*' \) -exec grep -l ".log.txt" {} \;

编辑4:

您尝试过简单的解决方案吗?

find /home/tom/project/ -type f -name ".log.txt"

或者

find /home/tom/project/ -type f -name "*" -exec grep -l ".log.txt" {} \;

你能举个它仍然可以找到的文件夹的例子吗? - Bogdan Emil Mariesan
找到:文件系统循环检测;“./.snapshot/hourly.0”与文件系统层次结构中高2级的目录具有相同的设备号和inode。 找到:文件系统循环检测;“./.snapshot/hourly.1”与文件系统层次结构中高2级的目录具有相同的设备号和inode。 - Rajeev
还是一样的。你能看到我编辑过的问题吗?其实我也在寻找.log.txt文件。抱歉。 - Rajeev
关于日志文件,它是以点开头吗?还是可以使用任何名称后跟.log.txt的形式? - Bogdan Emil Mariesan
我已经尝试了http://www.linuxquestions.org/questions/linux-general-1/how-to-tell-find-to-not-search-inside-hidden-folders-208169/上的所有示例,但仍无法正常工作。 - Rajeev
最后更新 :) 如果这不起作用,不确定下一步应该建议什么 - Bogdan Emil Mariesan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接