Linux Notizen / find
StartSeite | LinuxNotizen/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
InArbeit
Es gibt viele Möglichkeiten, unter Unix / Linux eine Datei-Auswahl zu treffen, das universellste - aber nicht gerade einfachste - Werkzeug dafür ist das find-Programm.
Alternativen:
- Wildcard-Expansion der Shell (Begrenzung max. einige Tausend Files), z. B.
- Selektionsparameter der einzelnen Tools (Achtung auf die Anführungszeichen rund um die Wildcards), z. B.
- Erzeugen eines kompimierten Archivfiles "test.tar" aus dem aktuellen Verzeichnis (inkl. aller Unterverzeichnisse) jedoch ohne bak-Files:
- tar --exclude "*.bak" -czf test.tar .
- Anzeige aller c-Sourcefiles ausgehend vom aktuellen Verzeichnis (-print ist Default).
- Locate ist Bestandteil der binutils und verwendet einen Index
Aktionsmöglichkeiten:
- -print (Default = Ausgabe des Filename auf stdout, als Zeile)
- -print0 (Ausgabe des Filename auf stdout, beendet mit ASCII 0)
- -ls (Ausgabe in ähnlichem Format wie ls)
- -exec (Aufruf eines Programmes, {} steht für den Dateipfad, Paramter bis \;)
- -execdir (wie -exec jedoch: Aufruf im Verzeichnis der Datei, Dateiname ohne Verzeichnisspezifikation in {})
- -delete (Löscht alle gefundenen Dateien, ACHTUNG - GEFÄHRLICH)
- -ok (wie exec, jedoch Prompt für jede einzelne Datei)
- Löschen mit Prompt:
- find . -name "*ak*" -ok rm {} \; -print
Neben der Auswahl über den Dateinamen können auch fast alle anderen Datei-Eigenschaften zur Auswahl herangezogen werden:
- Dateiname:
- -name "wild*card"
- -iname "...." (case-insensitiv)
- -path "wild*card" (prüft den Pfad=Verzeichnis+Dateiname)
- -ipath "...." (case-insensitiv)
- -regex "...." (RegularExpression, wirkt auf den gesamten Pfad)
- -iregex "...." (RegularExpression, case-insensitiv)
- Dateigröße:
- Dateien mit einer Größe von 1001-1999 Byte:
- find . -size +1000c -size -2000c -ls
- Relativer Ort (Tiefe) im Verzeichnisbaum:
- ...
- -mindepth n
- -maxdepth n
- Dateityp:
- -type t (t: b=block special, c=character special, d=directory, f=regular file, l=symbolic link, p=FIFO, s=socket)
- Alle Verzeichnisse, maximal 2 Ebenen tief:
- find . -type d -maxdepth 2
- Zeitangaben:
- Access time (Zugriffszeit, entspricht ls -lu):
- -amin n
- -anewer file (identisch mit -neweram file)
- -atime n
- Status Change time (chmod, chown; entspricht ls -lc) :
- -cmin n
- -cnewer file (identisch mit -newercm file)
- -ctime n
- Letzte Änderung (entspricht ls -l):
- -mmin n
- -mnewer file (identisch mit -newermm file)
- -mtime n
- Relativ zu einer Datei:
- -newer file (identisch mit -newermm file)
- -newerXY file (insgesamt 9 Kombinationen X bzw. Y = a,c oder m)
- Alle Dateien, die seit dem letzten Zugriff auf test.dat modifiert wurden:
- Rechte:
- ...
- -user uname
- -nouser
- -group gname
- -nogroup
- -perm [-|+]mode
- Filesystem:
Weiters gibt es zwei Arten, die ausgewählten Dateien (Dateinamen) an andere Programme weiterzugeben:
- durch Aufruf mit jedem Dateinamen ( {} steht für den Dateinamen):
- find . -name "*.xyz" -type f -exec grep -q SUCHTEXT {} \; -print
- durch Übergabe mittels Pipe an dafür geeignete Utilities:
Logische Verknüpfung von Bedingungen:
- AND
- NOT (mittel Option -not oder !)
- Finde alles, was keine normale Datei ist :
- OR
- Finde alle normalen Dateien, die entweder ein c im Pfadnamen haben oder mindestens 100000 Byte groß sind.
- find . -type f \( -name "*c*" -or -size +100000c \) -ls
Beispiel: finden aller "hart verlinkten" Verzeichniseinträge für eine Datei | |
- ls -i datei (zeigt inode-Nummer in Spalte 1, im Beispiel 26347)
- find / -inum 26347 -ls (listet alle Verzeichniseinträge)
Siehe auch:
KategorieUnix
StartSeite | LinuxNotizen/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 30. Juli 2004 16:33 (diff))