find mit gleicher File Extension und exclude?

gadean

Well-Known Member
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