从包含一系列通配模式的文件生成文件列表

从包含一系列通配模式的文件生成文件列表

我正在寻找一种通过解析包含一系列zsh通配模式的文件来构建文件列表的方法。

最终目标是将这个文件列表传递给 hg addmercurial。对于那些对此特定部分感兴趣的人,我的问题是由我在 StackOverflow 中提出的另一个问题引发的:

示例文件(我们称之为.hginclude)如下所示:

.zshrc                                                                                                                                                                                                                                                                                    
.zprofile                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
.less*                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
.emacs*/**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
src*/**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
.hg*                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
.bash*                                                                                                                                                                                                                                                                             
.inputrc                                                                                                                                                                                                                                                                                  
.ssh

脚本的输出应该是文件通过收集输出获得

print globbing_pattern

在每一行上,whereglobbing_pattern指的是上面文件中的每一行.hginclude

最终,文件列表应该是一个我可以传递到hg addMercurial 中跟踪这些文件的列表。

这部分的假设是我有.hgignore以下内容:

syntax: glob
*

这意味着:除非通过命令明确添加,否则不要跟踪任何内容hg add

答案1

hg 帮助模式。 Mercurial 支持从文件中读取文件名,因此您可以执行以下操作

$ hg add listfile:myfiles.txt

myfiles.txt包含要添加的文件名。对您来说更有趣的是 Mercurial 中的“文件名”可以是 glob 模式。所以你可以myfiles.txt包含

.zshrc
.zprofile
glob:.less*
glob:.emacs*/**

等等,hg add上面的命令会做正确的事情。

你甚至可以使用文件集选择文件。这是一种find类似的语言,可以让你做类似的事情

set:exec() and not binary()

选择非二进制的可执行文件,即脚本。


上面的命令将要尊重该.hgignore文件,因此您不能直接使用它们来解决您的问题。但是,您可以使用

$ hg status --all --no-status listfile:myfiles.txt

获取按模式匹配的文件列表,包括通常会被忽略的任何文件。然后您可以继续使用此文件列表hg add

$ hg status -A -n -0 listfile:myfiles.txt | xargs -0 hg add

答案2

尝试这个:

 hg add `for i in `cat myfiles.txt` ; do ls $i ; done`

其中 myfiles.txt 包含 glob。但当然 initpc 的建议更干净。

相关内容