Find - Suchen unter Linux

Aus Laub-Home Wiki

Hier eine kleine Sammlung von Dingen die man unter Linux mit Hilfe des Programms find machen kann. Alle find Befehle die hier ausgeführt werden durchsuchen das aktuelle Verzeichnis in dem man sich gerade befindet, samt aller Unterordner. Will man ein anderes Verzeichnis durchsuchen muss man einfach nur den Pfad hinter find schreiben, zum Beispiel:

find /your/search/path -name "FILE"

Die komplette Mächtigkeit des Befehles findet ihr wie immer in der Manpage von find

man find


Dateien finden und löschen

find . -iname "thumbs.db" -delete

Leere Verzeichnisse & Dateien finden (und löschen)

Leere Dateien suchen

find . -empty

leere Dateien löschen

find . -empty -exec rm {} \;

leere Ordner löschen

find . -empty -exec rmdir {} \;

Dateien (hier JPGs) kleiner 20kb finden & löschen

find . -iname "*.jpg" -size -20k -delete

JPG Bilder finden & anzeigen

Hierfür wird das Paket ImageMagick benötigt.

Hier werden alle Bilder angezeigt die kleiner 20KB sind

find . -iname *.jpg -size -20k -exec display -size 100x100 {} \;

und hier alle größer als 10MB

find . -iname *.jpg -size +10M -exec display -size 100x100 {} \;

Dateien (hier JPGs) kleiner 20kb suchen und Summe in kb errechnen

find . -iname *.jpg -size -20k -exec du -sck {} \; | awk '{sum+=$1}END{print sum}'

Hier wird nach Video Dateien gesucht, die KB Größe zusammenaddiert und dann in MegByte umgerechnet.

expr $(find . -iname "*.avi" -exec du -sck {} \; | awk '{sum+=$1}END{print sum}') / 1024

Dateien suchen und durch eine neue ersetzen

Die zu ersetzende Datei ist die test.txt und die neue Datei liegt hier unter /tmp/test-neu.txt. Am Ende heißen die ersetzten Dateien wieder test.txt.

find . -iname test.txt -exec cp /tmp/test-neu.txt {} \;

Bilder suchen und in ein anderes Format konvertieren

Hier werden TIF Bilder in JPGs umgewandelt

find . -iname "*.tif" | awk '{ print substr($0,1,length($0)-3) }' | xargs -i convert -verbose {}tif {}jpg

Nach Dateien Suchen die einem Benutzer oder einer Gruppe gehören

Dateien die dem User "apache" gehören:

find / -user apache

Dateien suchen die der Gruppe "apache" gehören:

find / -group apache

alte Dateien Löschen

Wenn man Dateien (z.B.:Logfiles oder Backups) löschen will, die älter als zum Beispiel 7 Tage sind geht das so:

find /backup -iname "*.tar.gz" -mtime +7 -delete

Dateien löschen die 2 Kriterien erfüllen

Zip Dateien löschen die in einem bestimmten Ordner liegen:

find . -iname "*.zip" -and -iname "*backup*" -delete

Find und Leerzeichen im Dateinamen

Wer, über den Linux Befehl “find” eine Schleife auslösen will, und dabei Leerzeichen in Datei- oder Pfadnamen bekommt, wird feststellen, dass die for schleife immer an Leerzeichen ein neues “Result” ergibt. Das bedeutet ein Script wie sowas funktioniert dann nicht

#!/bin/bash
for file in $(find /media/daten/ -iname *.vmx)
do
echo $file
done

Die einzig funktionierende Möglichkeit ist die Variabel $IFS auf \n zu setzen.

#!/bin/bash
IFS=$'\n'
for file in $(find /media/daten/ -iname *.vmx)
do
echo $file
done
unset IFS

Jetzt wird schön brav jede Einzelne Zeile auch mit Leerzeichen in Pfadangaben ausgegeben. Mehr dazu auch hier.
Quelle: http://www.denkweite.de/2008-03-19/linux-find-und-leerzeichen-in-dateinamen/

Suchen und Ersetzten in Dateien

Will man zum Beispiel einen Rechnernamen oder ein Verzeichnis in beliebigen Dateien auf einmal ändern, kann folgender Befehl dafür verwendet werden:

find . -type f -exec sed -i 's/rechnername1/newrechnername1/g' {} \;
  • Info: Hier kann für das Suchmuster auch eine RegEx verwendet werden.