N個の文字サブセットを含むディレクトリ名を非再帰的に一致させる方法(使用find
)
私の特別なケースでは、6桁のディレクトリ名だけが欲しいです。これはうまくいきますが、具体的ではありません(数値とともにすべてのディレクトリ名が提供されます)。
find . -maxdepth 1 -type d -regex './[0-9]+'
ls -d +([0-9])
これはうまくいきますが、数字で始まり、後に何も来るディレクトリ名を提供します。
find . -maxdepth 1 -type d -name '[0-9]*'
私が読んだところでは、正規表現の代わりにglobを使用しているので、N回のマッチング方法がわかりませんls
(そしてglobについては何も知りません)。私が理解していないのは、次のいずれも使用できないことですfind
。
find . -maxdepth 1 -type d -regex './[0-9]{6}'
find . -maxdepth 1 -type d -name '[0-9]{6}'
find . -maxdepth 1 -type d -name '[0-9]+'
私は正規表現を何度も試しましたが、私のパターンに何が問題なのかわかりません(それを指定する必要があることも驚くべきことです./
)-regex
。
答え1
regex
GNUの基本的なタイプは、間隔をサポートしていないということfind
です。emacs
他の正規表現型を指定できます。たとえば、posix-egrep
これは問題を解決します。
find . -maxdepth 1 -type d -regextype posix-egrep -regex './[0-9]{6}'