Finden Sie Dateien, die nach mehreren Erweiterungen gefiltert sind


52

Was ist die richtige Syntax für:

find . -type f -name \*.\(shtml\|css\)

Das funktioniert, ist aber unelegant:

find . -type f -name \*.shtml > f.txt && find . -type f -name \*.css >> f.txt

Wie mache ich das gleiche, aber mit weniger Tastenanschlägen?

Antworten:


75

Sie können verschiedene Suchausdrücke mit den logischen Operatoren -oroder kombinieren -and, damit Ihr Fall als geschrieben werden kann

find . -type f \( -name "*.shtml" -or -name "*.css" \)

Dies zeigt auch, dass Sie bei der Verwendung von Anführungszeichen keine speziellen Shell-Zeichen maskieren müssen.

Bearbeiten

Da -orhat eine geringere Priorität als der -andzwischen -typeund dem ersten -namegesetzte Namensteil in Klammern, wie von Chris vorgeschlagen.


Dadurch werden auch Verzeichnisse mit dem Namen "* .css" gedruckt.
Teddy

Hmm, die Klammern in Ihrer aktualisierten Version sind etwas verlegt. Die einzelne Klammern müssen , um am Ende als separater Parameter zu finden , so dass sie Räume brauchen um sich herum ( `„ .css“)` Ergebnisse in einem einzigen String - Wert; es ist dasselbe wie (zB) `' .css)' ). Second, the parentheses need to go around whole ‘primaries’ (the open parenthesis needs to be before -name`, nicht zwischen ihm und seinem 'Operanden').
Chris Johnsen

15

Hier ist eine Möglichkeit, Ihre erste Version zu erstellen:

find -type f -regex ".*/.*\.\(shtml\|css\)"

12

Sie müssen in Klammern setzen, um nur Dateien einzuschließen:

find . -type f \( -name "*.shtml" -o -name "*.css" \) -print

Bonus : Dies ist eine POSIX-konforme Syntax.


4

Ich stelle oft fest, dass ich egrep, längere Pipes oder Perl für noch komplexere Filter verwende:

find . -type f | egrep '\.(shtml|css)$'
find . -type f | perl -lne '/\.shtml|\.css|page\d+\.html$/ and print'

Es mag etwas weniger effizient sein, aber das ist normalerweise kein Problem, und für komplexere Dinge ist es normalerweise einfacher zu konstruieren und zu modifizieren.

Die Standard-Einschränkung bezieht sich darauf, dass dies nicht für Dateien mit seltsamen Dateinamen (z. B. mit Zeilenumbrüchen) verwendet wird.


+1 Bei einer sauberen und modularen Lösung treten die Leistungsengpässe normalerweise auf, wenn die aus den Suchergebnissen resultierenden Dateien verarbeitet werden.
Cristik
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.