1

$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 工具?)?

4

1 回答 1

1

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

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

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

用任何适合的“状态”类型命令替换回声

于 2012-02-23T16:20:43.873 回答