How can I get `find` to ignore .svn directories?

后端 未结 20 1511
迷失自我
迷失自我 2020-12-04 05:05

I often use the find command to search through source code, delete files, whatever. Annoyingly, because Subversion stores duplicates of each file in its .

20条回答
  •  臣服心动
    2020-12-04 05:35

    Here is what I would do in your case:

    find . -path .svn -prune -o -name messages.* -exec grep -Iw uint {} +
    

    Emacs' rgrep built-in command ignores .svn directory, and many more files you're probably not interested in when performing a find | grep. Here is what it uses by default:

    find . \( -path \*/SCCS -o -path \*/RCS -o -path \*/CVS -o -path \*/MCVS \
              -o -path \*/.svn -o -path \*/.git -o -path \*/.hg -o -path \*/.bzr \
              -o -path \*/_MTN -o -path \*/_darcs -o -path \*/\{arch\} \) \
         -prune -o \
           \( -name .\#\* -o -name \*.o -o -name \*\~ -o -name \*.bin -o -name \*.lbin \
              -o -name \*.so -o -name \*.a -o -name \*.ln -o -name \*.blg \
              -o -name \*.bbl -o -name \*.elc -o -name \*.lof -o -name \*.glo \
              -o -name \*.idx -o -name \*.lot -o -name \*.fmt -o -name \*.tfm \
              -o -name \*.class -o -name \*.fas -o -name \*.lib -o -name \*.mem \
              -o -name \*.x86f -o -name \*.sparcf -o -name \*.fasl -o -name \*.ufsl \
              -o -name \*.fsl -o -name \*.dxl -o -name \*.pfsl -o -name \*.dfsl \
              -o -name \*.p64fsl -o -name \*.d64fsl -o -name \*.dx64fsl -o -name \*.lo \
              -o -name \*.la -o -name \*.gmo -o -name \*.mo -o -name \*.toc \
              -o -name \*.aux -o -name \*.cp -o -name \*.fn -o -name \*.ky \
              -o -name \*.pg -o -name \*.tp -o -name \*.vr -o -name \*.cps \
              -o -name \*.fns -o -name \*.kys -o -name \*.pgs -o -name \*.tps \
              -o -name \*.vrs -o -name \*.pyc -o -name \*.pyo \) \
         -prune -o \
         -type f \( -name pattern \) -print0 \
         | xargs -0 -e grep -i -nH -e regex
    

    It ignores directories created by most version control systems, as well as generated files for many programming languages. You could create an alias that invokes this command and replace find and grep patterns for your specific problems.

提交回复
热议问题