だから、次のコマンドを受け取りました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つの問題があります。
- 先に説明したようにAlpineで「find」コマンドが「?」をエスケープする必要があるようですが、Ubuntuではそうではないのはなぜですか?、デフォルトのRegEx構文はAlpineLinuxとLUbuntuで異なります。
- 第二に、
\d
キャラクタークラスは次のとおりです。「PCRE」スタイル拡張find
Lubuntuに付属のGNUではサポートされていない基本正規表現の一部です。
したがって、この-regextype
オプションを使用して必要な機能を持つRegExタイプを明示的に選択し、そのスタイルに従う必要があります。あなたの場合は、次のものを使用できます拡張正規表現:
find ./testfolder/ -mindepth 1 -regextype "egrep" -regex '^.*/[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}$'