以下を使用する必要があります。
grep -rio pattern --exclude-dir=".config/dir1*" --exclude-dir=".test*"
grep
名前におよびを含むpattern
すべてのフォルダを避けるには、.config/dir1
.test
たとえば.config/dir1
、、、、.config/dir1/dir2
および.test
は./other/.test
除外する必要があります。
私がこのフォルダを除外していないものは何ですか?助けてもらえますか?
ありがとう
答え1
注文する.test/
とのファイルを除外しますother/.test/
。
フルパスではなくディレクトリのデフォルト名だけが解決されるため、.config/dir1
その中のファイルは除外されません。--exclude-dir
また、除外され--exclude-dir="dir1"
ますelsewhere/dir1
。ディレクトリが除外されると、そのサブディレクトリも除外されるため--exclude-dir="dir1"
除外されます.config/dir1/dir2
。
grepの除外パターンが不十分な場合find
に使用できますgrep
。構文はfind
より複雑ですが、機能はより強力です。たとえば、.config/dir1
名前付きの他のディレクトリは除外できますが、除外することはできませんdir1
。 (GNU grepがあるので、GNU findもあるとします。)
find . \
-path "./.config/dir1" -prune -o \
-name ".test" -prune -o \
-type f -print0 |
xargs -0 grep -io pattern