====== find ====== * [[https://wiki.ubuntuusers.de/find/]] * [[http://doc-tcpip.org/Unix/find-cmd.html]] * [[http://media.fossclub.de/tutorial-find.html]] * [[http://www.sascha-theves.de/techno/linux-file-permissions/]] * [[http://www.wirtschaftsinformatik-24.de/shell-programmierung/find-befehl-linux.php]] 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: [[::edv#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: [[bash#leeren_unterverzeichnisse_loeschen]] ==== find mit REGEX verwenden ==== * [[http://stackoverflow.com/questions/6844785/how-to-use-regex-with-find-command]] 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'