为什么找到。 -not -name“。*”不排除隐藏文件?

时间:2013-06-03 15:44:00

标签: bash replace find

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

find . -not -name ".*"

还会打印隐藏文件。

我想写的脚本是

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
}

2 个答案:

答案 0 :(得分:9)

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

find $PWD -name ".*" -prune -o -print

(我使用$PWD因为否则搜索“。”的开头也会被修剪,并且没有输出)

答案 1 :(得分:0)

正确的版本

replace() {
        if [ -n "$3" ]; then expr=-name\ $3; fi
        find $PWD -name '.*' -prune -o $expr -type f -exec sed -i s/$1/$2/g {} \;
        unset expr
}