Dies ist eine alte Version des Dokuments!
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:
> 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 60 Minuten sind:
> time find /tmp/ -maxdepth 2 -type f -mmin +60 -print
alle Dateien im /tmp/-Verzeichnis finden, die jünger als 60 Minuten sind:
> time 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'
