如何堆叠通配符来定位特定文件?

如何堆叠通配符来定位特定文件?

我想定位所有名为fooxxxbarxxx.所有这些文件的共同点是它包含foobar

我尝试使用*foo*bar**foo**bar*它不起作用。

具体来说,我正在尝试创建到这些文件的软链接,其余代码已经可以用于更直接的执行(查看 的所有子文件夹path):

shopt -s globstar

ln -s /path/**/*foo*bar* .

谢谢

答案1

bashshell 中,您需要使用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 {} +

相关内容