Ich möchte find -name mit mehreren Dateitypen ausführen.
find -name *.h,*.cpp
Ist das möglich?
$ find . -name '*.h' -o -name '*.cpp'
Um diese Informationen auf der Seite man
zu finden, geben Sie man find
und die Suche nach Operatoren ein, indem Sie /OPERATORS
eingeben und die Eingabetaste drücken.
Der .
ist bei GNU find nicht unbedingt erforderlich, aber bei Unix erforderlich. Die Anführungszeichen sind in beiden Fällen wichtig. Wenn Sie sie weglassen, werden Fehler ausgegeben, wenn Dateien dieses Typs im aktuellen Verzeichnis angezeigt werden.
Auf einigen Systemen (wie Cygwin) sind Klammern erforderlich, um die Erweiterungen zu berücksichtigen:
$ find . \( -name '*.h' -o -name '*.cpp' \)
Das ist was ich benutze
find . \( -name "*.h" -o -name "*.cpp" \) -print
find . -name "*.h" -or -name "*.cpp"
funktioniert bei mir.
find . -name '*.h' -o -name '*.cc'`
arbeitet für die Suche nach Dateien.
find . \( -name '*.h' -o -name '*.cc' \)`
funktioniert zum Ausführen von Befehlen auf ihnen
find . \( -name '*.h' -o -name '*.cc' \) -exec egrep "#include" {} \; -print | egrep "^\."
Sie können auch das Dienstprogramm -regex
Verwenden:
find -E . -iregex ".*\.(js|jsx|html|htm)"
Denken Sie daran, dass der reguläre Ausdruck den vollständigen absoluten Pfad betrachtet:
Eine Erklärung für diesen regulären Ausdruck mit Testfällen finden Sie unter: https://regex101.com/r/oY1vL2/1
-E
(Als Flag VOR dem Pfad) ermöglicht erweiterte (moderne) reguläre Ausdrücke.
Dies ist für BSD find
(Mac OSX 10.10.5)
find ./ -name *.csv -o \\-name *.txt|xargs grep -i new
Ich verwende das Argument "-regextype posix-extended".
find . -type f -iname "*.log" -o -iname "*.gz"
find . -type f \( -name "*.gz" -o -name "*.log" \)
find . -type f -regex '.*\(\.gz\|\.log\)'
find . -type f -regextype posix-extended -regex '.*.(log|gz)'