2016-03-31 11 views
0

ich passen nicht möchte alle Dateien in einem bestimmten Ordner löschen, die das Muster entsprechen nicht ^transactions_[0-9]+Wie rekursiv alle Dateien im Ordner löscht, die ein bestimmtes Muster

Lassen Sie sich sagen, ich habe diese Dateien im Ordner

file_list 
transactions_010116.csv 
transactions_020116.csv 
transactions_check_010116.csv 
transactions_check_020116.csv 

ich möchte transactions_check_010116.csv und transactions_check_020116.csv löschen und die ersten beiden verlassen, wie sie verwenden ^transactions_[0-9]+

ich habe versucht, find zu verwenden so etwas wie unten, aber dieser Ausdruck löscht alles in dem Ordner nicht nur die Dateien, die das Muster nicht entsprechen:

find /my_file_location -type f ! -regex '^transactions_[0-9]+' -delete 

Was ich versuche, hier zu tun ist, mit regex alle Dateien im Ordner finden, die mit ^transactions_[0-9]+ starten nicht und lösche sie.

Antwort

1

auf Ihrer Implementierung Je könnten Sie haben Option -E verwenden, um die Verwendung von Voll Regexes zu ermöglichen. Ein anderes Problem ist, dass -regex Ihnen einen fast vollständigen Pfad gibt, der mit dem Verzeichnis beginnt, das Sie übergeben haben.

So ist der richtige Befehl sein sollte:

find -E /my_file_location ! -regex '.*/transactions_[0-9]+$' -type f -delete 

Aber Sie sollten zuerst das gleiche Problem mit -print sicher sein ...

+0

danke für deine antwort, leider gibt es 'find: unbekanntes prädikat -E 'zurück - gibt es eine andere möglichkeit regex-ausdrücke mit einem find-befehl zu verwenden? Ich habe versucht, '/ my_file_location -regextype sed zu finden! -regex ". */transactions_ [0-9] \ +" -type f -delete' aber das hat das Muster nicht gefunden und so alles im Ordner gelöscht –

+0

@SamGilbert: tut das 'finde/meine_datei_stelle! -regex '. */transactions_ [0-9] + $' -type f -print listet die Dateien auf, die Sie löschen möchten? Und da ich nicht das gleiche "finde" wie du, was kannst du an "-regextype" weitergeben? –

+0

ah Ich habe es, das Muster '. */Transactions_ [0-9] +. * '' Druckt die erforderlichen Dateien! So jetzt können Sie sie löschen, danke für Ihre Hilfe –

1

grep hat Option -v alles grep nicht die mitgelieferte regex passend:

find . | grep -v '^transactions_[0-9]+' | xargs rm -f 
+0

Dank für die schnelle Antwort, habe ich die Lösung, die Sie empfohlen getestet > 'finde/meine_dateistelle | grep -v 'Transaktionen_ [0-9] \ +' | xargs rm -f' Ich musste dem '+' entkommen, aber ich denke es ist fast da. Das einzige Problem ist, dass es auch versucht, das Verzeichnis zu entfernen, kann es angepasst werden, um nur Dateien zu entfernen? –

+0

Sicher, verwenden Sie einfach 'find -type f .', um nur Dateien anzuzeigen –

+0

Ich habe dies versucht>' find -type f/my_file_location | grep -v 'Transaktionen_ [0-9] \ +' | xargs rm -f' aber Fehler mit 'Pfaden müssen den Ausdrücken vorausgehen ', nachdem der Dateipfad ein' grep: invalid - 't'' bringt - irgendwelche Gedanken darüber, was ich hier falsch mache? –

Verwandte Themen