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

Was ist unter Linux ein schnellerer Weg als `find` oder `diff -r`, um zu sehen, ob sich etwas in einem Verzeichnis geändert hat?

Lösung 1:

GNU tar hat eine Option --newer-mtime, die ein Datumsargument erfordert, das vermutlich das letzte Mal ist, dass Sie eine Sicherung durchgeführt haben. Je nachdem, wie viel Arbeit Sie für die Wiederherstellung des Dateisystems wollten, könnte dies entweder die letzte vollständige Sicherung sein, in diesem Fall müssten Sie den vollständigen Dump und die letzte tägliche Sicherung wiederherstellen, oder Sie könnten dies seit der letzten inkrementellen Sicherung tun In diesem Fall müssten Sie den vollständigen Dump und jeden Dump danach wiederherstellen.

Diese Option ist auf den Änderungszeitstempel der Datei angewiesen. Wenn dieser also ausdrücklich geändert wurde, besteht die Möglichkeit, dass Ihr Backup ihn verfehlt.

Lösung 2:

Das Dienstprogramm Incron verwendet inotify, um Befehle auszuführen, wenn Dateisystemereignisse auftreten. Die Konfigurationsdatei ist wie eine Crontab, aber statt Zeiten geben Sie Pfade und Ereignisse an.

Der Befehl könnte entweder Ihr Sicherungsskript sein (in diesem Fall wird die Sicherung fast sofort nach der Änderung der Dateien gestartet), oder Sie könnten eine Datei erstellen und das Sicherungsskript auf die Existenz dieser Datei prüfen und sie dann löschen lassen. Wenn die Datei existiert, ist eines der Ereignisse seit der letzten Ausführung eingetreten.

Lösung 3:

Sie könnten immer find leiten 's Ausgabe an wc und erhalte eine ganzzahlige Anzahl geänderter Dateien:

find . -ctime 1 | wc -l

Obwohl Davids Antwort weniger Codeänderungen erfordert :)

Lösung 4:

Das ist eine etwas verrückte Idee, aber Sie könnten ein wenig mit md5sum und ls spielen.

Diese Idee besteht darin, nur eine md5-Summe einer Datei zu betrachten, und dass diese Datei eine Dateiliste des Verzeichnisses ist, das Sie beobachten. Und solange sich nichts ändert, bleibt die md5-Summe gleich. Aber wenn ein Zeitstempel aktualisiert wird, ändert sich die MD5-Summe, und Sie wissen, dass Sie ein neues Tar erstellen und es an Ihren FTP-Server senden müssen.

Wir könnten mit so etwas anfangen

ls -lR /path/to/dir/ | md5sum > file_list.txt.md5

Dann müssten Sie einen Vergleich zwischen dem alten md5 und dem aktuellen hinzufügen ... etc etc

/Johan

Lösung 5:

Neuere Versionen von GNU find haben die Aktion "-quit", die bewirkt, dass find die Suche sofort beendet:

— Aktion:-beenden

Sofort beenden (mit Rückgabewert Null, wenn keine Fehler aufgetreten sind). Dies unterscheidet sich von „-prune“, da „-prune“ nur für den Inhalt bereinigter Verzeichnisse gilt, während „-quit“ die Suche einfach sofort stoppt. Es werden keine untergeordneten Prozesse mehr ausgeführt, aber es werden keine weiteren in der Befehlszeile angegebenen Dateien verarbeitet. Zum Beispiel:find /tmp/foo /tmp/bar -print -quit gibt nur „/tmp/foo“ aus. Alle Befehlszeilen, die mit „-exec ... +“ oder „-execdir ... +“ erstellt wurden, werden aufgerufen, bevor das Programm beendet wird.

Sie könnten einen find-Ausdruck verwenden, um Dateien zu finden, die sich geändert haben, und mit -quit stoppen, sobald Sie eine gefunden haben. Das sollte schneller sein, als seinen Scan fortzusetzen.

-quit wurde in fileutils V4.2.3 hinzugefügt


Linux
  1. Überprüfen Sie mit C unter Linux, ob ein Verzeichnis leer ist

  2. Schnellerer Weg zum Verschieben der Speicherseite als mremap()?

  3. Was ist Doppelpunkt (..) und Einzelpunkt (.) in Linux?

  4. Wie kann ich eine Datei/ein Verzeichnis finden, das sich irgendwo in der Linux-Befehlszeile befinden könnte?

  5. Was ist der schnellste Weg, um unter Linux eine Million Bilder von einem Verzeichnis in ein anderes zu verschieben?

So zählen Sie Dateien im Verzeichnis in Linux

Älteste Datei finden und löschen, wenn mehr als X Dateien in einem Verzeichnis in Linux vorhanden sind

So ermitteln Sie die Gesamtgröße eines Verzeichnisses in Linux

Der Linux-Befehl zum Suchen des Verzeichnisses:Erklärt

Was versteht man unter Mounten eines Geräts unter Linux?

Finden Sie jede Zeile in VI, die etwas anderes als ATCG enthält