GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Haben Sie Probleme mit Suchbefehlen beim Pruning von Verzeichnissen?

Ich bin mir nicht sicher, was ich dabei falsch mache. Ich habe eine Reihe von Beiträgen und Websites gelesen, habe aber immer noch Probleme.

Ich muss ein System auf Dateien überprüfen, die sich am letzten Tag geändert haben, aber ich muss bestimmte gemountete Ordner überspringen, da sie auf Laufwerken mit Tonnen von TB gemountet sind.

Hier ist das Setup:
Ich habe einige Laufwerke in Ordnern innerhalb von /usr/local/connect/
/usr/local/connect/logs gemountet –> Mounts in einem NFS
/usr/ local/connect/DR01 –> mountet zu einer DR-Freigabe
noch ein paar mehr davon…

Ich möchte einen normalen Suchbefehl (oder einen beliebigen Befehl, der dafür funktionieren würde) ausführen, der diese Verzeichnisse ausschließt. Hier sind Dinge, die ich ausprobiert habe und die anscheinend nicht funktioniert haben.

finden . ! -path „/usr/local/connect/“ -type f -name „*.txt“ -mtime -1

finden . -type f -Pfad „/usr/local/connect/“ -prune -o -name „*.txt“ -mtime -1

Beides scheint nicht zu funktionieren. Ich habe auch versucht, es in verschiedenen Reihenfolgen zu tun (wie -type f first oder prune first in line usw.). Aber ich habe gelesen, dass Prune den weiterführenden Pfad entfernt. Dies scheint so zu sein, als ob es eine einfache Sache sein sollte. Lassen Sie mich wissen, wenn Sie meinen Fehler sehen! Vielen Dank im Voraus!

Akzeptierte Antwort:

-path "/usr/local/connect/" würde nur auf einen Dateipfad passen, der genau /usr/local/connect/ ist . Das wird nie passen, weil mit find . , alle Pfade beginnen mit .

Sie möchten also:

find / -path '/usr/local/connect/*' -type d -prune -o \
       -name '*.txt' -type f -mtime -1 -print

Der -print ist auch wichtig. Ohne sie würde es einen impliziten -print geben für Dateien, die mit dem gesamten Ausdruck übereinstimmen (also beide Teile des -o ).

Beachten Sie, dass Sie auch -xdev verwenden können um zu verhindern, dass Dateisystemgrenzen überschritten werden.

Wenn Sie es mit find . ausführen möchten wenn das aktuelle Verzeichnis /usr/local ist , das müsste lauten:

cd /usr/local &&
  find . -path './connect/*' -type d -prune -o \
         -name '*.txt' -type f -mtime -1 -print

Linux
  1. So finden Sie große Dateien unter Linux mit den Befehlen find und du

  2. Auslassen der Erweiterung mit Find?

  3. Wie lösche ich Verzeichnisse rekursiv mit Wildcard?

  4. Suchen Sie eine Datei mit den Befehlen Suchen und Suchen in Linux

  5. bash findet Verzeichnisse

Was ist Git Bash? Arbeiten mit Git Bash-Befehlen

Cheat Sheet für Linux-Befehle:Mit Beispielen

Find-Befehl in Linux (Dateien und Verzeichnisse suchen)

Nmap-Befehle mit Beispielen

Zwei Befehle zum einfachen Auffinden von Dateien und Verzeichnissen in Debian 11

Wie kann ich leere Verzeichnisse in meinem Home-Verzeichnis rekursiv löschen?