Inhaltsverzeichnis

find

Hier zeige ich nur ein paar erprobte Beispiele.


mit dieser Kommandozeile werden alle Dateien und Verzeichnisse angezeigt, dessen Benutzer und Gruppe nicht "www-data" sind:

> find ${ZIELVERZ} ! -user www-data -o ! -group www-data

…und hiermit werden die Dateien nicht angezeigt, sondern direkt angepasst:

> find ${ZIELVERZ} ! -user www-data -o ! -group www-data -exec chown www-data:www-data {} \;

mit dieser Kommandozeile kann man die Dateien finden und deren Rechte korrigieren, die nicht von allen Benutzern lesbar sind:

> find /var/www/ -type f -not -perm -444
> find /var/www/ -type f -not -perm -444 -exec chmod 0644 {} \;

mit dieser Kommandozeile kann man die Verzeichnisse finden und deren Rechte korrigieren, die für seinen Benutzer nicht beschreibbar sind:

> find /var/www/ -type d -not -perm -700
> find /var/www/ -type d -not -perm -700 -exec chmod 0755 {} \;
> find * -type d -perm u=rwx,g=rx,o=rx
> find * -type f -perm u=rw,g=r,o=r

https://wiki.ubuntuusers.de/chmod/

> find /var/www/ \( -type d -exec chmod 755 {} + \) -o \( -type f -exec chmod 644 {} + \)

so listet man alle Dateien aus diesem Verzeichnis auf, die maximal einen Tag lang nicht mehr geöffnet wurden (jünger als 1 Tag sind):

> find . -type f -atime -1

so listet man alle Dateien aus diesem Verzeichnis auf, die mindestens 7 Tage lang nicht mehr geöffnet wurden:

> find . -type f -atime +7

alles was länger als 6 Minuten nicht mehr verändert wurde, löschen

> find */ -type f -mmin +6 -exec /bin/rm -rf {} \;

alles was länger als 100 Tage nicht mehr verändert wurde, löschen

> find /var/log/jasmin/ -type f -mtime +100 -exec /bin/rm -rf {} \;

so listet man alle Dateien aus diesem Verzeichnis auf, die mindestens 7 Tage lang nicht mehr geöffnet wurden oder vor mindestens 4 Tagen verändert wurden:

> find . -type f -atime +7 -o -mtime +4

so listet man alle Dateien aus diesem Verzeichnis auf, die mindestens 7 Tage lang nicht mehr geöffnet wurden und die Zeichenfolge "robots" im Namen haben:

> find / -type f -atime +7 -name '*robots*'

atime/mtime/ctime: Zeit-Attribute einer Datei im unixoiden Dateisystem

Will man veraltete Dateien finden, durchsucht man natürlich die "atime" aller Dateien. Hier ein paar Beispiele…

alle ausführbaren Dateien ausgeben lassen:

> find /mnt -type f -executable -print

Zugriffsrechte auf alle Verzeichnisse setzen:

> find /mnt -type d -execdir chmod 0775 '{}' \;

Zugriffsrechte auf alle Dateien setzen:

> find /mnt -type f -execdir chmod 0664 '{}' \;

Dateien nach alter suchen

alle Dateien im /tmp/-Verzeichnis finden, die älter als 7 Tage sind:

> find /tmp/ -type f -mtime +7 -print

alle Dateien im /tmp/-Verzeichnis finden, die älter als 60 Minuten sind:

> find /tmp/ -maxdepth 2 -type f -mmin +60 -print

alle Dateien im /tmp/-Verzeichnis finden, die jünger als 60 Minuten sind:

> find /tmp/ -maxdepth 2 -type f -mmin -60 -print

bestimmte Unterverzeichnisse löschen

alle /tmp/tmp.xxxxxxxxx-Verzeichnisse (z.B. "/tmp/tmp.5Tu5kaJvYH") löschen, die älter als 60 Minuten sind:

> time find /tmp/ -maxdepth 2 -type d -mmin +60 -print | fgrep /tmp/tmp. | xargs rm -fr ${1}

leere Unterverzeichnisse löschen

rekursiv:

> find . -mindepth 1 -type d -empty -depth -exec rmdir {} \;

rekursiv, wenn es besonders viele sind:

> find . -mindepth 1 -type d -empty -depth -print | xargs rmdir

leeren Unterverzeichnisse mit rmdir löschen: leeren_unterverzeichnisse_loeschen

find mit REGEX verwenden

die REGEX muß für die komplette Zeile formuliert werden, sonst geht es nicht:

> find . -regex '.*/[a-f0-9\-\_][a-f0-9\-\_]*.jpg'

mit REGEX vom Typ "sed":

> find . -regextype sed -regex '.*/[a-f0-9\-\_][a-f0-9\-\_]*.jpg'