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