私のSamsung Galaxy Sは、名前の最初のドットの後に長い文字列を含むファイルが好きではありません。ソフトウェアの一部にファイル拡張子に比べて短すぎるバッファがあるようです。 /media/sdで、Micro-SDカードにインストールされているファイル名が最初のドットの後に5文字以上であるすべてのファイルを見つける方法は?
検索マニュアルページを読みながら考えています。
find . -regex '.*\..\{5,\}'
うまくいきますが、ヒットは生成されないため、なんとか正しい正規表現を取得できません。
答え1
問題は、findが使用するデフォルトの正規表現型がemacsスタイルであることです。探しているEmacsスタイルの正規表現に関するドキュメント構文を含まない\{n,\}
- findのemacsスタイルの正規表現の実装がそれをサポートしていないと信じています。これemacs-wikiではこれを有効なものとしてリストします。、しかし、必ずしもそうではありません。
これにより、正規表現が次のような出力を生成することがわかりました。
$ find . -regextype posix-basic -regex '.*\..\{5,\}'
答え2
基本正規表現の実装に中かっこが常に含まれるわけではありません。 GNU find か Busybox find があるかどうかはわかりません。 BusyboxにはGNU findのすべての機能がないかもしれません。
拡張子が長いファイルを検索する移植可能な方法はfind . -name '*.?????*'
。
正規表現は、名前にドットを含むディレクトリの下のほとんどのファイルと一致します。