我已经阅读并尝试了与此类似的问题的各种答案,但它们对于我的特定用例不起作用(或者至少我无法让它们起作用)。
我有一个 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。