Find - Suchen unter Linux
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.