2016-07-26 28 views
1

Wenn ich den folgenden Befehl ausführen, erhalte ich eine Liste von DateienDatei mit numerischen Werten, die größer als eine bestimmte Anzahl finden

find . -type f -name '*_duplicate_[0-9]*.txt' 

./prefix_duplicate_001.txt 

./prefix_duplicate_002.txt 

./prefix_duplicate_003.txt 

./prefix_duplicate_004.txt 

./prefix_duplicate_005.txt 

Jetzt bin ich daran interessiert sind nur in Dateien, die die Zahlen größer oder gleich müssen 003. Wie kann ich das schaffen?

Vielen Dank im Voraus.

Antwort

2

Mit -regex Option in find, können Sie regex zwicken alle Dateien mit 3 oder höheren Wert nach _duplicate_ mit führenden Nullen zu erhalten:

find . -regextype posix-extended -type f \ 
     -regex '.*_duplicate_0*([3-9]|[1-9][0-9])[0-9]*\.txt' 

Auf OSX verwenden diesen find:

find -E . -type f -regex '.*_duplicate_0*([3-9]|[1-9][0-9])[0-9]*\.txt' 

./prefix_duplicate_003.txt 
./prefix_duplicate_004.txt 
./prefix_duplicate_005.txt 
+2

Wenn ich etwas nicht vermisse, denke ich nicht, dass das '_010' finden wird ... – twalberg

+0

Ja, du hast Recht @twalberg, es ist jetzt behoben – anubhava

+0

@anubhava irgendwie läuft diese Befehle auf meinem Macbook gibt mir den folgenden Fehler "find: -regextype: Unbekannter Primär- oder Operator" – kirikoumath

0
00[3-9]|(([1-9]\\d\\d)|(\\d[1-9]\\d)) 

nur für die Nummer Teil.

+1

Während Code oft für sich selbst spricht, ist es gut, einige hinzufügen Erklärung zu Ihrem Code. Dies tauchte in der Review-Warteschlange auf, wie es nur Code-Antworten tun. Auch, wenden Sie bitte korrekte Formatierung an. – Will

+0

@Will danke deine Benachrichtigung – beatrice

+1

Während Code-Only-Antworten nicht verboten sind, bitte verstehen, dass dies eine Q & A-Community ist, anstatt eine Crowd-Sourcing, und dass, wenn das OP den Code als Antwort bekannt gab, er/sie hätte eine ähnliche Lösung für sich selbst gefunden und hätte überhaupt keine Frage gestellt. Dasselbe Prinzip gilt auch für zukünftige Leser, die mit dem vorgelegten Code möglicherweise nicht vertraut sind. Bitte geben Sie den Kontext für Ihre Antwort und/oder Ihren Code an, indem Sie erklären * wie * und/oder * warum * es funktioniert. – XenoRo

0

Einsatz Dieses Muster

.*_duplicate_(?!00[1-2])\d{3}\.txt 

Demo

0

So viel wie ich einzelne Befehle verwenden möchten, wenn möglich, denke ich vielleicht das, was Sie brauchen, ist hier:

find . -type f -name '*_duplicate_[0-9]*.mat' | awk -F '[_.]' '$4 > 3 { print $0 }' 

Es gibt Variationen, dass - zum Beispiel diese:

find . -type f -name "*.mat" | awk -F '[_.]' '$0 ~ /_duplicate_[0-9]*.mat/ && $4 > 3 { print $0 }' 

Aber ich bin nicht sicher, ob es wirklich einen Unterschied aus Effizienzgesichtspunkten macht ...