为什么找到.-not -name".*"不排除隐藏文件?

use*_*684 5 bash replace find

我想忽略所有隐藏文件,但特别是.git和.svn在搜索(以及后来替换)文件时,我没有发现排除许多在线教程中描述的隐藏文件的最基本方法在这里不起作用.

find . -not -name ".*"
Run Code Online (Sandbox Code Playgroud)

还会打印隐藏文件.

我正在尝试编写的脚本是

replace() {
    if [ -n "$3" ]; then expr="-name \"$3\""; fi
    find . -type f \( $expr -not -name ".*" \) -exec echo sed -i \'s/$1/$2/g\' {} \;
    unset expr
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*oni 9

事情是-not -name ".*"匹配除了"."之外的所有文件和目录. - 但它不会从搜索中删除它们,因此您将从隐藏目录中获取匹配项.修剪路径使用-prune,即:

find $PWD -name ".*" -prune -o -print
Run Code Online (Sandbox Code Playgroud)

(我使用,$PWD因为否则搜索"."的开始也将被修剪,并且将没有输出)