查找不在.gitignore中的文件

Modified on: Sat, 30 Jun 2018 04:18:00 +0800

我找到了在我的项目中显示文件的命令:

find . -type f -not -path './node_modules*' -a -not -path '*.git*' \
       -a -not -path './coverage*' -a -not -path './bower_components*' \
       -a -not -name '*~'

如何过滤文件,使其不显示.gitignore中的文件?

我以为我用了:

读取文件时

while read file; do
    grep $file .gitignore > /dev/null && echo $file;
done

但.gitignore文件可以有glob模式(如果文件位于.gitignore中,它也不能用于路径),如何根据可能有globs的模式过滤文件?

最佳答案

git提供git-check-ignore检查文件是否被.gitignore排除。

所以你可以使用:

find . -type f -not -path './node_modules*' \
       -a -not -path '*.git*'               \
       -a -not -path './coverage*'          \
       -a -not -path './bower_components*'  \
       -a -not -name '*~'                   \
       -exec sh -c '
         for f do
           git check-ignore -q "$f" ||
           printf '%s\n' "$f"
         done
       ' find-sh {} +

请注意,您需要支付大笔费用,因为已对每个文件执行了检查。

作者:cuonglm

相关问答

添加新评论