find -regexが他のコンピュータで異なる動作をするのはなぜですか? [コピー]

find -regexが他のコンピュータで異なる動作をするのはなぜですか? [コピー]

だから、次のコマンドを受け取りましたfind

find ./test-folder -type d -mindepth 1 -regex "^.*/\d\{4\}-\d\{2\}-\d\{2\}$"

以前にこのフォルダを作成したことがあり、./testfolderそのmkdir testfolder中にフォルダも作成しましたmkdir ./testfolder/2022-10-12

AlpineベースのDockerコンテナでBashを使用してコマンドを実行すると、すべてがfind正常に動作し、出力が表示されます。/path/to/testfolder/2022-10-12

Lubuntuシステムのbashで同じコマンドを実行すると、何も出力されません。

私はfindコマンドやその周辺の何も修正しなかったし、すべてのシステムで動作すると予想していますが、正規表現は異なる動作をするようです。一致が*機能し、無限の数の数字と一致しますが、数量子を\d*一致させるか使用しようとすると、もはや何も一致しません。-{4}

ここで何が間違っている可能性がありますか?また、LUbuntuでどのように実行できますか?

ベストアンサー1

コメントを通して、実際の質問は「\d{4}-\d{2}-\d{2}LUbuntuでその項目を一致させる方法」であると推論しました。

2つの問題があります。

  1. 先に説明したようにAlpineで「find」コマンドが「?」をエスケープする必要があるようですが、Ubuntuではそうではないのはなぜですか?、デフォルトのRegEx構文はAlpineLinuxとLUbuntuで異なります。
  2. 第二に、\d キャラクタークラスは次のとおりです。「PCRE」スタイル拡張findLubuntuに付属のGNUではサポートされていない基本正規表現の一部です。

したがって、この-regextypeオプションを使用して必要な機能を持つRegExタイプを明示的に選択し、そのスタイルに従う必要があります。あなたの場合は、次のものを使用できます拡張正規表現:

find ./testfolder/ -mindepth 1 -regextype "egrep" -regex '^.*/[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}$'

おすすめ記事