Befehlszeilen-Regextyp zum Löschen von Dateien

Befehlszeilen-Regextyp zum Löschen von Dateien

Ich habe eine Reihe von Dateien, die immer mit mindestens 5 numerischen Werten beginnen, wie:

85966_88.jpg

Mit dieser Antwort habe ich gelerntSo verwenden Sie Find und Regextype in einem Befehl zum Löschen von Dateien wie folgt:

find . -regextype posix-extended -iregex './a_[0-9]{6}' -execdir bash -c '[[ ${1##./a_} > 000750 ]] && echo $1' "removing: " {} \;

Ich habe diesen Befehl meinen Anforderungen entsprechend wie folgt geändert:

find . -regextype posix-extended -iregex './[0-9]{5}' -execdir bash -c '[[ ${1##./} > 000001 ]] && echo $1' "removing: " {} \;

Ich führe den Befehl aus und er löscht die Dateien nicht. Ich kann nicht herausfinden, wie ich alle .jpg-Dateien entfernen kann, die numerische Werte in den ersten 5 Ziffern haben und dann _

Antwort1

Erstens der Befehlwie geschriebenlöscht nichts: wie in der von Ihnen verlinkten Antwort erwähnt

Testen Sie dies mit dem echoBefehl und verwenden Sie stattdessen, wenn Sie sicher sind, dass die richtigen Dateien aufgelistet werden rm.

Zweitens ist es für Ihren Fall zu kompliziert, da Sie die Entfernung nicht auf einen Bereich oder eine Teilmenge der Übereinstimmungen beschränken möchten (Sie benötigen also nicht den Shell-Test). Sie könnten einfach Folgendes tun:

find -regextype egrep -regex '.*/[0-9]{5}_.*\.jpg' -print

(zum Testen) und ersetzen Sie -printes -delete, wenn Sie zufrieden sind, dass es richtig funktioniert.

Allerdings scheinen sogar reguläre Ausdrücke zu kompliziert – ein einfacher Glob-Match erfordert tatsächlich weniger Tipparbeit:

find -name '[0-9][0-9][0-9][0-9][0-9]_*.jpg' -print

(ersetzen Sie es erneut -printdurch „ , -deletewenn Sie sicher sind“).

Wenn Sie nicht rekursiv suchen müssen, sollte ein einfacher Shell-Glob funktionieren:

rm -i [0-9][0-9][0-9][0-9][0-9]_*.jpg

verwandte Informationen