特定のファイルを見つけるためにワイルドカードをスタックする方法は?

特定のファイルを見つけるためにワイルドカードをスタックする方法は?

という名前のすべてのファイルを探したいですfooxxxbarxxx。これらすべてのファイルの共通点fooは とbar

*foo*bar*試してみましたが動作*foo**bar*しません。

特に、これらのファイルへのソフトリンクを作成しようとしており、残りのコードはすでにより直接的な実行のために機能しています(すべてのサブフォルダが表示されますpath)。

shopt -s globstar

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

ありがとう

答え1

シェルでは、このタイプのORシェル拡張オプションをbash使用する必要があります。extglob

shopt -s extglob nullglob

その後、ワイルドカード

ln -s /path/**/@(*foo*bar*|*bar*foo*)

答え2

POSIX的に:

find /path -name '.*' -prune -o -name '*foo*' -name '*bar*' -exec sh -c '
  ln -s "$@" .' sh {} +

関連情報