Ich versuche, Dateien mit bestimmten Erweiterungen zu finden. Zum Beispiel möchte ich alle PDF- und JPG-Dateien mit dem Namen Robert finden
Ich weiß, dass ich diesen Befehl ausführen kann
$ find . -name '*.h' -o -name '*.cpp'
aber ich muss den Namen der Datei selbst neben den Erweiterungen angeben. Ich möchte nur sehen, ob es eine Möglichkeit gibt, das Schreiben des Dateinamens nicht immer wieder zu vermeiden. Danke!
iname
stattdessen verwenden - wobei die Groß- und Kleinschreibung nicht berücksichtigt wird .iname
odername
hängt davon ab, was Sie finden möchten. Ich war in Situationen, in denen der Fall wesentlich war.Antworten:
Meine Vorliebe:
find . -name '*.jpg' -o -name '*.png' -print | grep Robert
quelle
find -exec ...
jpg
oderpng
als Teil eines längeren Pfades.Mit
find
dem-regex
Argument von:find . -regex '.*/Robert\.\(h\|cpp\)$'
Oder einfach nur benutzen
-name
:find . -name 'Robert.*' -a \( -name '*.cpp' -o -name '*.h' \)
quelle
find -name "*Robert*" \( -name "*.pdf" -o -name "*.jpg" \)
Das
-o
stellt eineOR
Bedingung dar und Sie können so viele hinzufügen, wie Sie möchten. Das heißt also, alle Dateien zu finden, die das Wort "Robert" irgendwo in ihren Namen enthalten und deren Namen entweder mit "pdf" oder "jpg" enden.quelle
Alternativ zur Verwendung der
-regex
Option einfind
, da die Frage beschriftet istBashkönnen Sie den Klammererweiterungsmechanismus verwenden:eval find . -false "-o -name Robert".{jpg,pdf}
quelle
eval
oder den.
obigen Befehl verwendet, oder Siefind
sind ein Alias für etwas Komplizierteres, oder Sie verwenden die Standard-GNU nichtfind
für Ihre Linux-Version.find
sie wird nicht unterstützt-false
. Ich habe das umgangen, indem ich zwei sich gegenseitig ausschließende Bedingungen angegeben habe, damit sie kollektiv falsch sind :-inum 1 -inum 2
.Dieses Q / A zeigt, wie man find mit regulären Ausdrücken verwendet: Wie man Regex mit dem Befehl find verwendet?
Muster könnte so etwas wie sein
'^Robert\\.\\(h|cgg\\)$'
quelle
Als Skript können Sie Folgendes verwenden:
find "${2:-.}" -iregex ".*${1:-Robert}\.\(h\|cpp\)$" -print
findcc
und benutze es als
z.B
findcc # default name 'Robert' and directory . findcc Joe # default directory '.' findcc Joe /somewhere # no defaults
Beachten Sie, dass Sie nicht verwenden können
findcc /some/where #eg without the name...
alternativ können Sie auch verwenden
find "$1" -print | grep "$@"
und
mögen
findcc . -P '/Robert\.(h|cpp)$'
quelle
Verwenden von Bash Globbing (wenn dies
find
kein Muss ist)quelle
Wiederholt mit ls: (-al für versteckte Ordner einschließen)
ftype="jpg" ls -1R *.${ftype} 2> /dev/null
quelle