# $id: find - HowTo - 07/07/2005 # Finde ab dem aktuellen Verzeichnis und allen Unterverzeichnisse alle Dateien, in denen der Suchstring vorkommt (keine Unterscheidung zwischen Gross- und Kleinschreibung durch den Parameter -i). Diesen 5 zeiler in eine Datei "/bin/s.sh" speichern #!/bin/bash for i in $(find) do grep -n $1 $i 2> /dev/null && echo -e "Enthalten in $i \n" done Auf ausführen setzen: chmod 755 /bin/s.sh dann in verz. wechseln in dem gesucht werden soll (inkl. Unterverzeichnisse) Ausführen: s.sh suchsrting Finde die Datei fstab (alle Unterverzeichnisse ab dem aktuellen werden durchsucht): find . -name fstab Finde alle Dateien (ab dem Wurzelverzeichnis /) die neuer als /etc/fstab sind: find / -newer /etc/fstab Finde ab dem aktuellen Verzeichnis alle Dateien die groesser als 10 KByte gross sind: find . -size +10k oder: ls -lS $(find . -type f) | awk ' { if ($5 > 10240) print}' Finde ab dem aktuellen Verzeichnis alle Dateien die groesser als 500 Byte gross sind: find . -size +500c oder: ls -lS $(find . -type f) | awk ' { if ($5 > 500) print}' Finde alle Dateien deren Rechte auf SETUID gesetzt sind: find / -perm +4000 Alle Dateien finden die nicht aelter als einen Tag sind: find / -ctime -1 Alle Dateien finden die nicht aelter als zehn Minuten sind: find / -cmin -10 Alle Dateien finden auf die innerhalb des letzten Tages zugegriffen wurde: find / -atime -1 Alle Dateien finden auf die innerhalb der letzten zehn Minuten zugegriffen wurde: find / -amin -10 Finde alle Dateien deren letzter Zugriff vor 5 bis 10 Minuten war: find / -amin +5 -amin -10 Finde alle Dateien deren letzter Schreibzugriff vor 5 bis 10 Minuten war: find / -mmin +5 -mmin -10 Finde alle Dateien deren letzter Zugriff vor 5 bis 10 Tagen war: find / -atime +5 -atime -10 Finde alle Dateien deren letzter Schreibzugriff vor 5 bis 10 Tagen war: find / -mtime +5 -mtime -10 Nach dem Wort alias in der Dateien /etc/profile suchen: grep alias /etc/profile Alle Zeilen der Datei /etc/profile anzeigen die nicht mit dem Kommentarzeichen # beginnen: cat /etc/profile | grep -v ^# Wie zuvor jedoch werden alle gefundenen Zeilen in den Editor vi geladen und koennen anschliessend unter einem anderen Namen gespeichert werden: cat /etc/profile | grep -v ^# | vi - Finde ab dem aktuellen Verzeichnis alle Datei- und Pfad-Namen, in denen emacs vorkommt (keine Unterscheidung zwischen Groß- und Kleinschreibung durch den Parameter -i). find . 2> /dev/null | grep -i emacs Alle Dateien, ab dem aktuellen Verzeichnis, mit der Endung .txt werden nach der Zeichenkette ``Suchmuster'' durchsucht. Falls es zu viele Dateien sind mit einer Schleife suchen (siehe nächstes Beispiel): grep Suchmuster $(find . -name *.txt) 2> /dev/null Loesche alle Dateien mit der Endung .tmp ACHTUNG Dateien mit der Endung TMP werden in diesem Beispiel nicht gefunden: find / -name "*.tmp" -exec rm "{}" \; Finde ab dem aktuellen Verzeichnis alle Dateien mit der Endung .txt und kopiere sie ins /verzeichnis/text/ ACHTUNG Dateien mit der Endung TXT werden in diesem Beispiel nicht gefunden: find -name "*.txt" -exec cp "{}" /verzeichnis/text \; Finde ab dem aktuellen Verzeichnis alle Dateien die es mehrfach gibt (doppelte Dateien). Es wird die md5 Pruefsumme gefolgt vom Dateinamen angezeigt. Dateien mit gleiche Pruefsumme haben auch den gleichen Inhalt. find . -exec md5sum {} 2>/dev/null \; | sort | uniq -W 1 -D Ersetzen von Text sed 's/SO NICHT/ABER SO SCHON/g' datei DOS CR/LF in Unix Format umwandeln (Binär ASCI) sed 's/.$//' datei Ersetzen wenn Zeile XYZ nicht enthält sed '/XYZ/!s/DAS NICHT/DAS SCHON/g' datei Ausfiltern der IP-Adresse von ippp0 aus der Ausgabe von ifconfig ifconfig|sed '1,/ippp0/d;s/[ ]*inet addr://;s/[ ].*$//;q Leerzeile in Datei entfernen: sed '/^$/d' input_file > output_file Vor oder nach Zeilen, die einem Suchmuster entsprechen, Text einfügen sed '/Tat/i\Wort' input_file > output_file das Wort Ende wird an jedem Zeilenende angehängt sed 's/$/ Ende/g' inputfile > outputfile das Wort Anfang wird an jeden Zeilenanfang angehängt sed 's/^/ Anfang/g' inputfile > outputfile Suche in der Datei test.txt alle Zeichenketten ,,Windows`` und ersetze sie durch,,Linux`` perl -pi -e 's/Windows/Linux/g;' test.txt Suche in der Datei test.txt alle Zeichenketten ,,Windows`` und ersetze sie durch ,,Linux``. Die Datei ,,test.txt`` selbst soll nicht geaendert werden, die Ausgabe soll am Bildschirm (STDOUT) erfolgen. perl -p -e 's/Windows/Linux/g;' test.txt Alle Carriage-Return Zeichen der DOS-Datei dos.txt entfernen und nach unix.txt schreiben: cat dos.txt | tr -d '\r' > unix.txt Alle Grossbuchstaben (Auch deutsche Umlaute) von Eingabe.txt durch Kleinbuchstaben ersetzen und nach Ausgabe.txt schreiben: cat Eingabe.txt | tr A-ZÄÖÜ a-zäöü > Ausgabe.txt Wenn man mit find etwas suchen möchte, aber eine eventuell gemountete CD oder über NFS gemountete Verzeichnisse nicht berücksichtigen will, kann man diese mit folgendem Befehl ausschließen. Beispielsweise möchte man die ganze Festplatte nach Dateien nach dem Muster *.txt durchsuchen, aber weder im Verzeichnis /mnt/server noch auf der CD suchen. Dann ist folgender Befehl hilfreich: find / \(-path /cdrom -o -path /mnt/server \) -prune -o -name *.txt -print