如何在嵌入通配符的“查找”搜索中排除/忽略隐藏文件和目录?

如何在嵌入通配符的“查找”搜索中排除/忽略隐藏文件和目录?

从(注意前后通配符“一些文本”)

find . -type f -name '*some text*'

如何排除/忽略所有隐藏文件和目录?

我已经谷歌搜索太久了,遇到了一些 -prune 和 !(感叹号)参数,但没有合适的(和简约的)示例刚刚起作用

管道 |grep一种选择,我也欢迎这样的例子;但是主要我对简短的一行代码感兴趣(或几个独立的一行代码,说明实现相同命令行目标的不同方法)只是使用find

附言:在Linux中查找文件并排除特定目录似乎密切相关,但 a) 尚未被接受,且 b) 相关但不同且独特,但 c) 可能提供灵感并帮助找出混淆之处!

编辑

find . \( ! -regex '.*/\..*' \) -type f -name "whatever",有效。正则表达式会查找“任何内容,然后是斜线,然后是点,然后是任何内容”(即所有隐藏文件和文件夹及其子文件夹),而“!”会使正则表达式取反。

答案1

这将打印目录的所有后代文件,跳过隐藏文件和目录:

find . -not -path '*/.*'

因此,如果您正在寻找some text名称中包含的文件,并且想要跳过隐藏文件和目录,请运行:

find . -not -path '*/.*' -type f -name '*some text*'

解释:

-path选项运行针对整个路径字符串的模式检查。*是通配符,/是目录分隔符,.是点(在 Linux 上隐藏文件名以点开头),*是另一个通配符。-not表示不选择与此测试匹配的文件。

我认为这还不够find智能,无法避免在上一个命令中递归搜索隐藏目录,因此如果您需要速度,请改用-prune如下方法:

 find . -type d -path '*/.*' -prune -o -not -name '.*' -type f -name '*some text*' -print

答案2

这是排除点文件的少数几种方法之一,在 BSD、Mac 和 Linux 上也能正常工作:

find "$PWD" -name ".*" -prune -o -print
  • $PWD打印当前目录的完整路径,以便路径不以./
  • -name ".*" -prune匹配以点开头且不下降的任何文件或目录
  • -o -print表示如果前一个表达式不匹配任何内容,则打印文件名。使用-print-print0会导致所有其他表达式默认不打印。

答案3

find $DIR -not -path '*/\.*' -type f \( ! -iname ".*" \)

排除 $DIR 下的所有隐藏目录和隐藏文件

答案4

回答我最初以对上述问题的“编辑”形式发布:

find . \( ! -regex '.*/\..*' \) -type f -name "whatever",有效。正则表达式会查找“任何内容,然后是斜线,然后是点,然后是任何内容”(即所有隐藏文件和文件夹及其子文件夹),而“!”会使正则表达式取反。

相关内容