1

このように名前が付けられたファイル名があります...

[phone_number]_[email]_[milliseconds].mp4

それで:

2125551212_foo@blah.com_1378447385902.mp4

findmp4(おそらく) 正規表現パターンを使用して、10 桁で始まり、次のように終わるファイルを探します。

find ../media_pool -regex '^\d{10}.*mp4$'

ただし、それはまったく何も返しません。

このように試してみると、 find ../media_pool -regex 'mp4$' は、その拡張子で終わるすべてのファイルを返します...したがって、*正規表現の一部のサブセットで機能するように見えますが、すべてではありません。

誰かが私が必要なものを手に入れる正しい方法を教えてもらえますか? 他の何かがうまく機能する場合は、 find を使用しないことを嬉しく思います。

4

3 に答える 3

1

find がパス全体に一致することを理解するのにしばらく時間がかかったので、最初に「.*/」が必要です。以下はテスト済みで動作します。

find . -regextype posix-extended -regex '.*/[0-9]{10}.*mp4$'
于 2013-09-06T17:35:14.847 に答える
1

私は Linux ユーティリティの専門家ではありませんが、パターンの照合に使用される正規表現のタイプを指定できるようですが、\dサポートされていないようです。次のことを試してください。

find ../media_pool -regextype posix-extended -regex '^[0-9]{10}.*mp4$'

引用する必要があるかどうかはわかりません。それはあなたがposix-extended理解することです。

編集:申し訳ありませんが、別の問題がありました。エンジンの種類を変更する必要はありません。デフォルトでfindEmacsエンジンが使用され、サポートされている構文を確認できました。

find ../media_pool -regex '.*/[0-9]\{10\}.*mp4$'

キーは { と } をエスケープしています。\{10\}.*/ を先頭に追加して、find が返すフル パスに一致させます。

于 2013-09-06T17:28:24.643 に答える
0

findのデフォルトの正規表現エンジンは Emacs ですが、 -regextypeオプションを使用して別のものに変更できます。

sedを使用した例を次に示します。

find . -regextype sed -regex ".*/[0-9]\{10\}.*mp4$"

いくつかのエンジンがサポートされているため、おそらく他のソリューションがあります。注意すべきもう 1 つの重要な点は.*/、正規表現の先頭で、findがファイルのパス全体に一致するため、それをキャッチすることです。

于 2013-09-06T17:37:53.703 に答える