2017-07-11 3 views
2

私はファイル検索操作を行っています。私は38の16進数の名前を持つすべてのGITハッシュファイルを除外したいと思います。[0-9a-f]タイプの正確に38文字の正規表現を作成するには?

しかし、私はそれは

find . -not -name "[0-9a-f]" <-- 38 times. 

別の方法がありますを書くためにあまりにもエレガントだと思いませんか?

+1

それは[0-9A-F] {38}はありませんか? – Vivick

答えて

0

使用ブラケット:

find . -not -regex ".*[0-9a-f]\{38\}"

エスケープ "中括弧は、" - {} - 一致するREに先行>の出現回数を示します。

中かっこをエスケープする必要があります。なぜなら、中カッコはリテラル>文字だけが存在するからです。この使用法は、技術的には基本的なRE>セットの一部ではありません。

「[0-9] {5}」は、ちょうど5桁(0〜9の範囲の文字)と一致します。

http://tldp.org/LDP/abs/html/x17129.html

注:以前の回答(find . -not -name "[0-9a-f]\{38\}")が間違っていました。 @Cyrusによって指摘されているように、-regexオプションが必要です。さらに、findをディレクトリと一致させるために、接頭辞(またはそれに相当するもの)として。*を使用する必要があります(これははっきりしていますが、解決策をテストしていたときに私を引きつけました)。

小さな例:

ls -C1 
ab 
abab 
abcbade 
ac 
acba 
acca 
adda 
d 

find . -regex ".*[a-c]\{4\}" 
./abab 
./acba 
./acca 

find . -not -regex ".*[a-c]\{4\}" 
. 
./ab 
./abcbade 
./ac 
./adda 
./d 
+2

2 upvotesが間違った答えですか?オプション '-name'はグロビン構文を使います。 GNU findのオプション '-regex'はregexを使います。 – Cyrus

関連する問題