Git 如何实施VCS状态/忽略程序之类的程序?

Git 如何实施VCS状态/忽略程序之类的程序?,git,shell,find,status,ignore,Git,Shell,Find,Status,Ignore,在$dir中,我想(递归地)获得所有文件/dir的概述,但是: 排除$list中包含的所有文件/目录(假设$list以换行符分隔) 只包含未包含在$list中的最顶层目录,而不是它们下面的整棵树 我目前使用: cd$dir&&git init&&echo“$list”>.gitignore&&git status&&rm-rf.git.gitignore 这很简单,我需要的是“untracked files”列表,但并不是很干净,因为它为tmp git存储库执行了大量不必要的文件系统i/o,

$dir
中,我想(递归地)获得所有文件/dir的概述,但是:

  • 排除
    $list
    中包含的所有文件/目录(假设$list以换行符分隔)
  • 只包含未包含在
    $list
    中的最顶层目录,而不是它们下面的整棵树
我目前使用:

cd$dir&&git init&&echo“$list”>.gitignore&&git status&&rm-rf.git.gitignore

这很简单,我需要的是“untracked files”列表,但并不是很干净,因为它为tmp git存储库执行了大量不必要的文件系统i/o,并忽略了文件

我还一直在考虑使用修剪操作或类似于
empty=$(mktemp-d)和&rsync-nv--exclude from=$list$dir/$empty
的方法来查找
,但这些方法无法按我希望的方式工作


您将如何实现这一点?是否存在任何现有的shell/python/。。。就是这样做的工具?或者,我可以在不创建临时git存储库(或其他vcs工具)的情况下以某种方式重用git代码吗?

对于简洁的1-liner格式提前表示歉意(这样测试更容易)

列表的格式为“/path/to/file | dir | dir/*|*所有文件匹配此*|*.git…”


将echo替换为任何适合的“status”类型命令

为简洁的1行格式提前道歉(这样更容易测试)

列表的格式为“/path/to/file | dir | dir/*|*所有文件匹配此*|*.git…”

将echo替换为任何“status”类型的命令

for FILE in `find .`; do eval "case \"$FILE\" in "$list");;*)echo \"$FILE\";;esac";done