如何列出与全局模式匹配的文件?

如何列出与全局模式匹配的文件?

我已经阅读并尝试了与此类似的问题的各种答案,但它们对于我的特定用例不起作用(或者至少我无法让它们起作用)。

我有一个 CI 构建管道,允许指定 glob 模式来发布多个文件。该模式类似于“dir/subdir/**/*.ext”。我想要做的是在发布这些文件之前输出与此模式匹配的文件列表。

我试过了:

find . -path 'dir/subdir/**/*.ext'
ls 'dir/subdir/**/*.ext'

几种排列似乎都返回相似的结果。

上面find什么都不返回,作为旁注,如果我运行find . -path '**/*.ext'它会返回

./dir/subdir/debug/file1.ext
./dir/subdir/debug/file2.ext
./dir/subdir/publish/file1.ext

命令ls返回ls: cannot access 'dir/subdir/**/*.ext': No such file or directory

有没有办法让我在处理之前获取匹配文件的列表,如果可以,如何?

附加说明: 我想要获取文件列表的原因是,如果没有文件与模式匹配,我希望 CI 步骤失败。

答案1

@muru 的评论是正确的,除了我忘记在我的问题中添加额外的细节,即如果没有文件匹配,我想要一个空列表(这样我就可以使脚本失败)。

有了这个额外的背景,我实现这一目标的方式是

shopt -s globstar nullglob; printf %s\\n dir/subdir/**/*.ext

谢谢这个答案用于额外的 nullglob。

相关内容