Ich arbeite an einem Skript, um Dateien zu finden, die älter als 30 Tage in einem bestimmten Ordner sind. Je nach Anforderung muss ich nur Dateien mit der Erweiterung löschen.Protokolloder.ausund Unterverzeichnisse überspringen.
Der folgende Befehl gibt alle .log*-Dateien zurück, die vor 30 Tagen geändert wurden. Er gibt jedoch alle .out-Dateien zurück, auch die neueren. Ist im folgenden Code etwas falsch?
find -maxdepth 1 -mtime +30 -type f -name "*.log*" -o -name "*.out*"
Können Sie mir sagen, was an der obigen Aussage falsch ist?
Antwort1
Versuchen:
find -maxdepth 1 -mtime +30 -type f \( -name "*.log*" -o -name "*.out*" \)
Das Problem war, dass find
das logische „und“ stärker bindet als das logische „oder“. Die Klammern wirken dem entgegen.
Ohne Klammern find
wird nach Dateien gesucht, die übereinstimmenentweder(A)-mtime +30 -type f -name "*.log*"
oder(B) -name "*.out*"
.
Mit den Klammern find
wird nach Dateien gesucht, die (a) übereinstimmen-mtime +30 -type f
Und(b) entweder mit -name "*.log*"
oder übereinstimmen -name "*.out*"
.