find mit gleicher File Extension und exclude?

gadean

Depp vom Dienst!
Hey,
ich bräuchte mal eure Hilfe bezüglich find und dem löschen von Daten.

Ich habe folgende Struktur und möchte darin alle PNG-Dateien löschen, die nicht mit "-small" enden.
Code:
./example1/beschreibung.doc
./example1/abcde-smalll.png
./example1/abcde.png
./example2/beschreibung.doc
./example2/fghij-small.png
./example2/fghij.png

Bei unterschiedlichen Dateiendungen, wäre das relativ simple:
find . -name "*.png" -exec rm {} \;

Da ich aber in der Situation die -small.png Dateien behalten möchte, funktioniert das natürlich nicht.
Also habe ich etwas mit Regex rumgespielt und hätte ein Negativ Lookahead, aber meines wissens nach wird das nicht unterstützt:
^(?!.*-small).+\.png$

Also eventuell doch mit grep?
Funktioniert auch irgendwie, aber leider bekomme ich es nicht hin die Dateien zu löschen, also den Pipe zu rm.
find . -name "*.png" | grep -v "\-small\.png"

Ich steh da gerade etwas auf dem Schlauch.
 
find . -type f -not -name '*small*' -print0 | xargs -0 rm --

abfeuern im Überordner von example1 und example2...
 
@mr44er Damit würde ich aber dann alle Dateien außer *small* löschen?

Ihr habt mich aber auf eine Idee gebracht, wusste gar nicht, das ich "-name" mehrfach benutzten kann:
find . -type f -not -name "*-small.png" -name "*.png" -exec echo {} \;
 
Zurück
Oben