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'
