生成されたuuid1文字列で名前が付けられた画像がいくつかあります。たとえば、81397018-b84a-11e0-9d2a-001b77dc0bed.jpgです。「検索」コマンドを使用してこれらすべての画像を検索したい:
find . -regex "[a-f0-9\-]\{36\}\.jpg".
しかし、それは機能しません。正規表現に問題がありますか?誰かがこれを手伝ってくれませんか?
生成されたuuid1文字列で名前が付けられた画像がいくつかあります。たとえば、81397018-b84a-11e0-9d2a-001b77dc0bed.jpgです。「検索」コマンドを使用してこれらすべての画像を検索したい:
find . -regex "[a-f0-9\-]\{36\}\.jpg".
しかし、それは機能しません。正規表現に問題がありますか?誰かがこれを手伝ってくれませんか?
回答:
find . -regextype sed -regex ".*/[a-f0-9\-]\{36\}\.jpg"
パス全体に一致する.*/
ため、最初に指定する必要があることに注意してくださいfind
。
例:
susam@nifty:~/so$ find . -name "*.jpg"
./foo-111.jpg
./test/81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
./81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
susam@nifty:~/so$
susam@nifty:~/so$ find . -regextype sed -regex ".*/[a-f0-9\-]\{36\}\.jpg"
./test/81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
./81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
私のバージョンの検索:
$ find --version
find (GNU findutils) 4.4.2
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version e5573b1bad88bfabcda181b9e0125fb0c52b7d3b
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS() CBO(level=0)
susam@nifty:~/so$
susam@nifty:~/so$ find . -regextype foo -regex ".*/[a-f0-9\-]\{36\}\.jpg"
find: Unknown regular expression type `foo'; valid types are `findutils-default', `awk', `egrep', `ed', `emacs', `gnu-awk', `grep', `posix-awk', `posix-basic', `posix-egrep', `posix-extended', `posix-minimal-basic', `sed'.
"^ ... $"
ます。つまり、正規表現は暗黙的に囲まれています。全体の結果行と一致する必要があります。
/
する.*/
ため、in は必要ないと思います.*
。
\{36\}
valid types are 'findutils-default', 'awk', ' egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic', 'posix-egrep', 'posix -extended', 'posix-minimal-basic', 'sed'.
-regextype
フラグをする前に-regex
フラグ、それ以外の場合は適用されません!
-regex
検索式が一致した名前全体カレントディレクトリからの相対パスを含むが、。以下の場合find .
、この常にで始まる./
、その後、任意のディレクトリを。
また、これらはemacs
正規表現であり、通常のegrep正規表現以外のエスケープルールがあります。
これらがすべて現在のディレクトリに直接ある場合、
find . -regex '\./[a-f0-9\-]\{36\}\.jpg'
うまくいくはずです。(私は本当にわからない-私はここで仕事に数え繰り返しを取得することはできません。)あなたはegrepの式にで切り替えることができます-regextype posix-egrep
:
find . -regextype posix-egrep -regex '\./[a-f0-9\-]{36}\.jpg'
(ここで述べられていることはすべてGNU findであることに注意してください。MacのデフォルトでもあるBSDについては何も知りません。)
posix-egrep
型がうまくいきました。
-regextype
は、find
BSDではなく(少なくともMacのBSD風ではない)GNUのオプションですfind
。このオプションが利用できない場合は、必ずGNU findをインストールしてください。Macの場合、brewパッケージで可能findutils
です。その後、検索はから利用できますgfind
。
他の答えから判断すると、これはfindのせいかもしれません。
ただし、代わりにこの方法で行うことができます。
find . * | grep -P "[a-f0-9\-]{36}\.jpg"
grepを少し調整し、必要に応じて異なるオプションを使用する必要があるかもしれませんが、機能します。
find
の-prune
機能を利用できないことです。ほとんどの場合、これはそれほど重要ではありませんが、言及する価値があります。
Mac OS X(BSD find)の場合:受け入れられた回答と同じ.*/
ですが、完全なパスと一致させるにはプレフィックスが必要です。
$ find -E . -regex ".*/[a-f0-9\-]{36}.jpg"
man find
-E
拡張正規表現サポートを使用すると言います
-E
はUbuntuでは使用できません(WSL Ubuntuでテスト済み)
簡単な方法-findはパス全体と一致するため、最初に。*を指定できます。
$ find . -regextype egrep -regex '.*[a-f0-9\-]{36}\.jpg$'
バージョンを見つける
$ find --version
find (GNU findutils) 4.6.0
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION
FTS(FTS_CWDFD) CBO(level=2)