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

发布于 2024-12-21 16:10:04 字数 662 浏览 2 评论 0原文

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

  • 排除 $list 中包含的所有文件/目录(假设 $list是换行符分隔的)
  • 只包含 $list 中未包含的最顶层目录,而不是

我当前使用的它们下面的整个树:

cd $dir && git init &&回声“$列表”> .gitignore && git 状态 && rm -rf .git .gitignore

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

我也一直在考虑使用修剪操作或类似 empty=$(mktemp -d) && 的 find 。 rsync -nv --exclude-from=$list $dir/ $empty 但这些不会按照我想要的方式工作。

你将如何实施这个?有没有现有的 shell/python/... 工具可以做到这一点?或者我可以以某种方式重用 git 代码而不实际创建临时 git 存储库(或另一个 vcs 工具?)?

in $dir, I want to get an overview of all files/dirs (recursively), but:

  • exclude all files/dirs which are included in $list (assume $list is newline separated)
  • only include the most-toplevel directories not included in $list instead of whole trees beneath them

I currently use:

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

this is simple and the 'untracked files' listing is what i need, but isn't really clean, as it does a bunch of unneeded filesystem i/o for the tmp git repository and ignore file.

I've also been pondering find with prune actions or something like empty=$(mktemp -d) && rsync -nv --exclude-from=$list $dir/ $empty but those wouldn't work the way i want them to.

how would you implement this? is there any existing shell/python/... tool that does just this? or can i somehow reuse the git code without actually making a temporary git repository (or another vcs tool?)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑忘罢 2024-12-28 16:10:04

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

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

列表的格式将是“./path/to/file|dir|dir/*|*allfilesmatchingthis*|*.git... "

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

Apologies in advance for the terse 1-liner format (it was easier to test this way)

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

the format for list would be "./path/to/file|dir|dir/*|*allfilesmatchingthis*|*.git..."

replace the echo with whatever "status" type command fits

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文