Schlagwort-Archive: bash Bourne-again shell

Bash (für Bourne-again shell) ist eine freie Unix-Shell und Teil des GNU-Projekts. Sie ist heute auf vielen unixoiden Systemen die Standard-Shell.

Dateien Suchen nach Änderungsdatum mit Find mtime iname

Find mtime und atime ist der Befehl der Wahl, wenn nach Änderungsdatum von Dateien auf dem Filesystem gesucht wird. Das Command Line Tool find bietet zahlreiche Optionen wie iname, mtime und atime, auch für die Anwendung in Shell-Scripts. Der Befehl find --help gibt dabei Hilfe, und man find zeigt die ausführliche Manpage.

Dateien mit find iname mtime suchen

Datei Suchen nach Änderungsdatum mit find iname atime mtime

Im Filesystem besitzt jede Datei drei Zeitstempel, die geändert werden, wann bestimmte Operationen an der Datei durchgeführt werden:

  • [a] access (den Inhalt der Datei lesen) – atime
  • [b] den Status ändern (die Datei oder ihre Attribute ändern) – ctime
  • [modify] (den Inhalt der Datei ändern) – mtime

Wir können Dateien suchen, deren Zeitstempel innerhalb eines bestimmten Altersbereichs liegen, oder sie können mit anderen Zeitstempeln verglichen werden.

find datei mtime (modify)

Die -mtime gibt eine Liste der Dateien zurück, wenn auf die Datei zuletzt vor N*24 Stunden zugegriffen wurde. Um beispielsweise eine Datei des letzten Monats (N=30 Tagen) zu finden, kann die -mtime +30 verwendet werden.

  • -mtime +30 bedeutet Datei suchen, die vor 30 Tagen geändert wurde.
  • -mtime -30 bedeutet weniger als 30 Tage.
  • -mtime 30 ohne + oder – bedeutet genau 30 Tage.

Hier werden Textdateien gesucht, die vor 30 Tagen zuletzt geändert wurden, mit folgendem Befehl:

$ find /home/user -iname "*.txt" -mtime -30 -print

Inhalte von Dateien anzeigen die zuletzt vor 30 Tagen geändert wurden:

$ find /home/user -iname "*.txt" -mtime -30 -exec cat {} \;

Die Gesamtzahl der TXT-Dateien zählen mit dem Befehl wc (Word Count):

$ find /home/user -iname "*.txt" -mtime -30 | wc -l

Gzip-Archiv Dateien die älter als 30 Tage sind löschen:

$ find /home/user/*.gz -mtime +30 -exec rm {} \;

find datei atime (access)

Nach Zugriffszeit suchen, der Befehl find atime gibt die Liste aller TXT-Dateien aus, auf die in den letzten 30 Tagen zugegriffen wurde:

$ find /home/user -iname "*.txt" -atime -30 -type -f

Mit find iname und atime json-Dateien auflisten auf die vor genau 14 Tagen zugegriffen wurde:

$ find /home/user -iname "*.json" -atime 14 -type -f

Hinweis: Der Schalter -type f – sucht nur nach Dateien, ohne Verzeichnisse.

Find kann Zeichenfolgen rekursiv in allen Dateien ab dem aktuellen Verzeichnis finden.

$ find . -type f -print0 | xargs -0 grep "some string"

Beispiel: Dateien rekursiv mit chmod ab dem aktuellen Verzeichnis ändern, jedoch nicht die Verzeichnisse.

$ find . -type f -print0 | xargs -0 chmod 0644

und umgekehrt, alle Verzeichnisse rekursiv mit chmod ab dem aktuellen Verzeichnis ändern, aber nicht die Dateien.

$ find . -type d -print0 | xargs -0 chmod 0755

find datei daystart

Die Option -daystart wird verwendet, um die Zeit ab Beginn des aktuellen Tages statt vor 24 Stunden zu messen. Finde alle gestern geänderten C++ Dateien (*.CPP) mit folgendem Befehl:

$ find /home/user -iname "*.CPP" -daystart -mtime 1

Um alle LOG-Dateien in /var/log aufzulisten, auf die gestern zugegriffen wurde, gilt der folgende Befehl:

$ find /var/log -iname "*.log" -daystart -mtime 1 -type f

C++ Dateien auflisten mit find iname mtime die vor 2-7 Tagen geändert wurden:

$ find /home/user -iname "*.CPP" -daystart -mtime 2 -mtime -7

Um Dateien im Verzeichnisbaum /home/user zu finden, die neuer sind als die Datei /mnt/user, führe folgendes aus:

$ find home/user -newer /mnt/user

Fazit

Mit dem Befehlszeilentool find lässt sich nach Dateien suchen mit find iname und mtime, um in der Linux Shell Dateien nach ihrem Änderungsdatum zu finden. Das Command Line Tool bietet mit den zahlreichen Optionen viele Möglichkeiten, diese auch in der Scriptverarbeitung nützlich sind.

Suchen und zählen doppelter Zeilen in Textdateien

In Textdateien nach doppelt oder mehrfachen Zeilen und Inhalt Suchen und zählen

Suchen und zählen doppelter Zeilen in Textdateien

Textdateien Filtern mit sort und uniq

Bei der Bearbeitung von Text oder Konfigurationsdateien in der Linux Shell, kann es oft die Anforderung geben, das identische Zeilen in den Textdateien nur einmal vorkommen dürfen. Damit das Suchen und zählen von Zeilen in Textdateien, insbesondere mit einer grösseren Anzahl an Zeilen nicht manuell erfolgen muss, hilft die Verwendung der Filter sort und uniq.

Linux sort und uniq

Dieser Befehl zählt doppelte Zeilen und sortiert die Ausgabe in der bash.

$ sort FILE | uniq --count

  Den Platzhalter FILE durch den wirklichen Dateinamen ersetzen.

Doppelt vorhandene Zeilen

Sollen nur doppelt vorhandene Zeilen ausgegeben werden.

$ sort FILE | uniq --count --repeated

Es wird nichts ausgegeben, wenn keine doppelten Zeilen in der Textdatei enthalten sind.

Fazit

Wie in diesem Beitrag gezeigt wird, können bei der Bearbeitung von Text oder Konfigurationsdateien in der Linux Shell, die Filter sort und uniq bei der Suche nach identischen Zeilen in den Textdateien nützlich sein. Damit das Suchen und zählen von Zeilen in Textdateien, insbesondere mit einer grösseren Anzahl an Zeilen nicht manuell erfolgen muss.

Das Programm sort und uniq

sort (/usr/bin/sort) ist ein Programm, mit dem Datenströme oder Dateien sortiert, zusammengeführt oder auf eine bereits vorliegende Sortierung überprüft werden können. Sortierungsschlüssel können alphabetisch oder numerisch sein und konfigurierbare Teile der Eingabe(-zeilen) in ebenfalls konfigurierbarer Reihenfolge umfassen.

Der Funktionsumfang wie auch die Funktionsweise von sort ist für UNIX-Systeme durch den POSIX-Standard geregelt. Dagegen weist das GNU-sort einige Abweichungen von diesem Standard auf. Die Single UNIX Specification listet das Utility sort als „mandatory“ (notwendigen Bestandteil) und spezifiziert sein erwartbares Verhalten.

uniq (/usr/bin/uniq) findet die eindeutigen Zeilen in einer bestimmten Eingabe. Als (stdin oder ein Dateinamen-Befehlszeilenargument) und meldet die duplizierten Zeilen entweder oder entfernt sie.

Dieser Befehl funktioniert nur mit sortierten Daten. Daher wird uniq häufig mit dem Sortierbefehl verwendet.

Hinweis: „uniq“ erkennt keine wiederholten Zeilen, es sei denn, sie liegen nebeneinander. Möglicherweise möchte man die Eingabe zuerst sortieren oder „sort -u“ ohne „uniq“ verwenden.