Suche nach zuletzt geänderten Dateien in den letzten 2 Minuten in deinem Home-Verzeichnis, die eine bestimmte Zeichenfolge enthalten

Suche nach zuletzt geänderten Dateien in den letzten 2 Minuten in deinem Home-Verzeichnis, die eine bestimmte Zeichenfolge enthalten

Ich suche in meinem Home-Verzeichnis nach Dateien, die in den letzten zwei Minuten geändert wurden und außerdem eine bestimmte Zeichenfolge enthalten. Ich habe es mit diesem Befehl versucht:

 find -type d -mmin -2 -ls | grep -Ril "mystring" 

Es scheint zu funktionieren, aber anscheinend werden nur die Dateien gedruckt, die die angegebene Zeichenfolge enthalten, und nicht die Dateien, die zuletzt vor 2 Minuten geändert wurden und die Zeichenfolge enthalten. Es scheint, als würde der erste Teil des Befehls nicht ausgeführt.

Antwort1

Du hast mit deinem eigenen Vorschlag einen guten Versuch unternommen

find -type d -mmin -2 -ls | grep -Ril "mystring"

Dadurch wären Verzeichnisse ( -type d) identifiziert worden, die innerhalb der letzten zwei Minuten geändert wurden, statt Dateien ( -type f). Wenn die Ausgabe von -lsan weitergeleitet würde grep, wäre normalerweise in den generierten Dateinamen nach gesucht worden mystring. In diesem Fall -Rändert das Flag jedoch das Verhalten von grepund ignoriert Ihre Liste mit Dateinamen. Stattdessen wird jede Datei im aktuellen Verzeichnis und darunter durchsucht.

Teilen wir das Problem also in zwei Teile auf

  1. Suche in deinem Home-Verzeichnis nach den zuletzt geänderten Dateien der letzten 2 Minuten

    find ~ -type f -mmin -2
    
  2. [Dateien] die einen bestimmten String enthalten

    grep -Fl 'certain String' {files...}
    

Jetzt müssen Sie sie zusammenfügen. Dies {}ist ein Platzhalter für die Dateinamen, die in findSchritt 1 generiert wurden, und das nachfolgende +zeigt an, dass die {}wiederholt werden können.mehrmals, also mehrere Dateinamen

    find ~ -type f -mmin -2 -exec grep -Fl 'certain String' {} +

Durch Ändern von grep„in“ echo grepwird angezeigt, was vom findBefehl ausgeführt wird. Dies kann eine nützliche Methode zur Fehlerbehebung sein:

    find ~ -type f -mmin -2 -exec echo grep -Fl 'certain String' {} +

Führen Sie bitte man findund aus, man grepum herauszufinden, welche verschiedenen Optionen es gibt, z. B. -Fund -lin grep -Fl, da Sie sonst nichts aus der Ihnen gestellten Übung lernen, sondern lediglich eine Antwort kopieren.

Antwort2

In der zshShell:

grep -l -F -i 'string' ~/**/*(.Dmm-2)

... wobei **rekursiv in Unterverzeichnisse passt und wobei .Din (.Dmm-2)bedeutet „nur normale Dateien ( .) übereinstimmen, aber versteckte Dateien ( D) einschließen“ und wobei mm-2„innerhalb der letzten zwei Minuten geändert“ bedeutet.

verwandte Informationen