Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.9k views
in Technique[技术] by (71.8m points)

bash - Why does find . -not -name ".*" not exclude hidden files?

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
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...