6

我想忽略所有隐藏文件,尤其是在搜索(以及稍后替换)文件时的 .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
}
4

2 回答 2

11

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

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

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

于 2013-06-03T15:48:45.737 回答
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
}
于 2013-06-03T17:04:22.940 回答