我想定位所有名为fooxxxbarxxx
.所有这些文件的共同点是它包含foo
和bar
。
我尝试使用*foo*bar*
但*foo**bar*
它不起作用。
具体来说,我正在尝试创建到这些文件的软链接,其余代码已经可以用于更直接的执行(查看 的所有子文件夹path
):
shopt -s globstar
ln -s /path/**/*foo*bar* .
谢谢
答案1
在bash
shell 中,您需要使用extglob
此 OR 类型 shell 扩展的选项。
shopt -s extglob nullglob
然后进行通配符
ln -s /path/**/@(*foo*bar*|*bar*foo*)
答案2
POSIXly:
find /path -name '.*' -prune -o -name '*foo*' -name '*bar*' -exec sh -c '
ln -s "$@" .' sh {} +