質問: 以下のようなファイルが数千ファイルあります。 000000000001_0_0_**1**_ドキュメント_1111111_001_001.docx 太字の箇所が1であるファイルを一括でmvしたいのですが、どのように記述したら良いでしょうか。 このように記述しましたが上手く抽出出来ませんでした。 *_?_?_1_*.* またDBにも同じ用にデータが入っており、どのようにwhere句で指定すると、対象に出来ますでしょうか。 初歩的な事で申し訳ないのですが、よろしくお願い致します。
回答: 前提として、`ls`や`mv`などのファイル操作で指定できるのは正規表現ではなく**ワイルドカード**です。そして正規表現とワイルドカードでは同じ記号でもその意味が異なります。 `?`は正規表現だと「直前の文字の0,1回の繰り返し」ですが、ワイルドカードでは「**任意の一文字**」を表します。 質問の例に対してワイルドカードで(雑に)マッチさせるなら、以下の様な記述になります。 ``` ????????????_?_?_1_* ``` MySQLの`where`句でパターンマッチをする場合も正規表現ではなくワイルドカードの指定になりますが、扱う記号が微妙に異なるようです。私自身あまりMySQLは詳しくないので解説は省略させてもらいます。 参考: MySQLの使い方 パターンマッチングで比較