如何实现类似VCS状态/忽略程序的东西?

时间:2011-12-16 10:55:00

标签: git shell find status ignore

$dir中,我希望得到所有文件/目录的概述(递归),但是:

  • 排除$list中包含的所有文件/目录(假设$ list是换行符)
  • 仅包含$list中未包含的最顶级目录,而不包括其下的整个树

我目前使用:

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

这很简单,“未跟踪文件”列表是我需要的,但不是很干净,因为它为tmp git存储库和忽略文件做了一堆不需要的文件系统i / o。

我也一直在考虑find使用修剪动作或类似empty=$(mktemp -d) && rsync -nv --exclude-from=$list $dir/ $empty之类的东西,但那些不会按我希望的方式工作。

你会如何实现这个?有没有现成的shell / python / ...工具呢?或者我可以以某种方式重用git代码而不实际制作临时git存储库(或其他vcs工具?)?

1 个答案:

答案 0 :(得分:1)

提前为简洁的1-liner格式道歉(以这种方式测试更容易)

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

列表的格式为“./path/to/file|dir|dir/*|*allfilesmatchingthis*|*.git ...”

用“status”类型命令

替换echo