2017-03-26 3 views
0

Ich muss Dateien finden und ignorieren wie "^ 02" (es ist Regex). Wenn "^ 02" ein Verzeichnis ist, muss ich alle Dateien ignorieren, die sich im Verzeichnis befinden. Ich weiß nicht, wie ich es machen soll. Ich habe versucht, sowas zu benutzen.Bash Find mit ignorieren

find . -type f -not -regex "^9" -o -prune 

Aber es funktioniert nicht.

Antwort

2

Beachten Sie, dass die Regex nicht ^ und $ nicht verwenden, da es immer die gesamte Zeichenfolge übereinstimmen muss. Außerdem beginnt der Pfad mit ./, wenn das erste Argument zu find. ist, also müssen Sie es auch einschließen.

find -type f -not -regex '\./02.*' 

Wenn Sie sogar Verzeichnisse ausschließen möchten, verwenden Sie .*/02.* für die regex.

Wenn Sie wollen nur die Verzeichnisse ausschließen, Pattern-Matching, aber Sie wollen die Dateien zu halten, müssen Sie prune verwenden nur für Verzeichnisse die Regex übereinstimmt, und -false die Verzeichnisse aus der Liste zu entfernen:

find . -type d -regex '\./02.*' -prune -false -or -type f 

Sie können auch Muster anstelle von Regex für einfache Fälle verwenden. Auf diese Weise können Sie -name verwenden, um Unterverzeichnisse einzubinden:

find . -name '02*' -prune -false -or -type f 
Verwandte Themen