Why does find . -not -name “.*” not exclude hidden files?

时光总嘲笑我的痴心妄想 提交于 2019-12-19 08:17:16

问题


I want to ignore all hidden files, but especially .git and .svn ones when searching (and later replacing) files, not I have found that the most basic way to exclude such hidden files described in many online tutorials doesn't work here.

find . -not -name ".*"

will also print hidden files.

The script I'm trying to write is

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
}

回答1:


The thing is -not -name ".*" does match all files and directories that start with anything but "." - but it doesn't prune them from the search, so you'll get matches from inside hidden directories. To prune paths use -prune, i.e.:

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

(I use $PWD because otherwise the start of the search "." would also be pruned and there would be no output)




回答2:


correct version

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
}


来源:https://stackoverflow.com/questions/16900675/why-does-find-not-name-not-exclude-hidden-files

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!