2016-05-25 10 views
0

Ich möchte alle Dateien finden, in denen der erste Teil des Dateinamens (bis zum ersten .) mit der Dateierweiterung übereinstimmt (nach der letzten .).Dateien finden, wo Präfix und Suffix übereinstimmen

Zum Beispiel würden die folgenden Dateien entsprechen:

cat.cat 
cat.txt.cat 

Während cat.txt.asm würde nicht.

Wie kann ich dies mit find?

+0

Ja. Sie sollten dafür suchen. Aber deine Frage ist sehr verwirrend geschrieben. – khrm

+0

Bitte geben Sie uns Input und Output, wenn Englisch nicht Ihre Muttersprache ist. – khrm

+0

Ok, tut mir leid, noch einmal. Zu dem Skript gebe ich ein Argument, das Verzeichnisbaum ist. Dann sollte es durch alle seine Dateien iterieren und nach denen suchen, die eine der Erweiterungen (nach Punkt) ist der gleiche wie sein Name vor diesem Punkt - filename.filename – moodym

Antwort

-1

Leider ist dies besser:

Sie könnten nur einfach tun:

für exemple toto.tata.toto spezifische finden:

find . -regex ".*\(toto\)[^\/]*\.\1" 

Allgemein:

find . -regex ".*/\([^./\]*\)[^\/]*\.\1" 
+0

Die Regexp ist falsch. Es stimmt nicht mit den richtigen Dateien überein und es werden nicht alle übereinstimmen. –

4

Verwenden Sie die Option -regex zu find:

find -regex '.*/\([^.]+\)\.\(.*\.\)?\1' 
  • .*/ entspricht den Pfad zur Datei
  • \([^.]+\) alles bis zum ersten Punkt einfängt (+ bedeuten mindestens ein Zeichen)
  • \(.*\.\)? den mittleren Teil übereinstimmt, dh alles, was in einem Punkt enden, aber das ganze ist optional
  • \1 bedeutet der erste Fang wiederholt

Könnte besser lesbar im egrep Dialekt sein:

find -regextype egrep -regex '.*/([^.]+)\.(.*\.)?\1' 
+0

Meine Augen tun weh, aber ich denke es ist richtig! –

1
find . -type f -iname "*" | awk -F/ '{print $2}' |awk -F. '$1==$NF' 

Or 

    ls -1 | awk -F. '$1==$NF'