find
コマンドの正規表現の使用に問題があります。おそらく、コマンドラインでのエスケープについて私が理解できないことです。
なぜこれらは同じではないのですか?
find -regex '.*[1234567890]'
find -regex '.*[[:digit:]]'
Bash、Ubuntu
文字クラスの正規表現(例:[[:digit:]]
)は、find
で使用されるデフォルトの正規表現構文ではサポートされていません。それらを使用するには、posix-extended
などの異なる正規表現タイプを指定する必要があります。
GNU Findの正規表現 ドキュメント を見てください。これは、すべての正規表現タイプとそれらがサポートするものを示しています。
find
の-regextype
引数を見てください。 manpage を参照してください。
-regextype type
Changes the regular expression syntax understood by -regex and -iregex
tests which occur later on the command line. Currently-implemented
types are emacs (this is the default), posix-awk, posix-basic,
posix-egrep and posix-extended.
emacs
型は[[:digit:]]
コンストラクトをサポートしていないと思います。 posix-extended
で試してみましたが、期待通りに機能しました:
find -regextype posix-extended -regex '.*[1234567890]'
find -regextype posix-extended -regex '.*[[:digit:]]'
-regex
はパス全体に依存することに注意してください。
-regex pattern
File name matches regular expression pattern.
This is a match on the whole path, not a search.
実際にあなたがしていることのために-regex
を使用する必要はありません。
find . -iname "*[0-9]"
さて、あなたはこれを試すことができます'.*[0-9]'