Finden Sie mehrere Dateien gleichzeitig über Terminal

Ich habe eine Liste von Dateinamen wie diese:

P1020804.JPG
P1020805.JPG
P1020806.JPG
P1020807.JPG
P1020808.JPG

Wie finde ich sie am besten alle durch eine einzige Abfrage in Spotlight, Terminal, mdfind oder locate?

Sind sie alle im selben Verzeichnis (Ordner)?

Antworten (3)

Ich gehe davon aus, dass Ihre Liste nur eine repräsentative Liste ist und die Dateinamen diesem Muster folgen und tatsächlich mehr als genau diese Dateinamen sein können. Daher wird die Verwendung eines erweiterten regulären Ausdrucks verwendet, um die Dateien zu finden , die dem Muster entsprechen , das in den Beispieldateinamen in Ihrem OP gezeigt wird.

find -E . -regex '.*\/P[0-9]{7}\.JPG'
  • -EInterpretieren Sie reguläre Ausdrücke gefolgt von -regexund -iregexVorwahlen als erweiterte (moderne) reguläre Ausdrücke und nicht als grundlegende reguläre Ausdrücke (BREs). Die re_format(7)Handbuchseite beschreibt beide Formate vollständig.
  • .Durchsucht das aktuelle Verzeichnis und seine Unterverzeichnisse.
  • -regex patternTrue, wenn der gesamte Pfad der Datei mit dem Muster unter Verwendung eines regulären Ausdrucks übereinstimmt.
  • .*\/P[0-9]{7}\.JPG
    • .*entspricht jedem Zeichen (außer Zeilenabschlusszeichen).
    • *Quantifier – Übereinstimmungen zwischen null und unbegrenzt oft, so oft wie möglich, geben nach Bedarf zurück (gierig).
    • \/stimmt wörtlich mit dem Zeichen überein /(Groß-/Kleinschreibung beachten).
    • P passt wörtlich auf das Zeichen P(Groß-/Kleinschreibung beachten).
    • [0-9]Übereinstimmung mit einem einzelnen Zeichen in der Liste.
    • {7}Quantifier — Entspricht genau 7 Mal 0-9einem einzelnen Zeichen im Bereich zwischen 0(Index 48) und 9(Index 57) (Groß-/Kleinschreibung beachten).
    • \.stimmt wörtlich mit dem Zeichen überein .(Groß-/Kleinschreibung beachten).
    • JPG stimmt wörtlich mit den Zeichen überein JPG(Groß-/Kleinschreibung beachten).

$ find -E . -regex '.*\/P[0-9]{7}\.JPG'
./Pictures/P1020799.JPG
./Pictures/P1020800.JPG
./Pictures/P1020801.JPG
./Pictures/P1020802.JPG
./Pictures/P1020803.JPG
./Pictures/P1020804.JPG
./Pictures/P1020805.JPG
./Pictures/P1020806.JPG
./Pictures/P1020807.JPG
./Pictures/P1020808.JPG
./Pictures/P1020809.JPG
./Pictures/P1020810.JPG
$

Hinweis: Dies .ist das aktuelle Arbeitsverzeichnis, das standardmäßig Ihr Home-Verzeichnis ist, wenn Sie gerade Terminal geöffnet haben. Wenn sich die Dateien an einem anderen Ort befinden, können Sie einen anderen Startpfad verwenden, z. B. /im Stammverzeichnis der Macintosh HD (unter der Annahme einer Standardbenennung). Wie Sie in der Beispielausgabe sehen können, befanden sich die vom Regex-Muster gefundenen Zieldateinamen in meinem Bilderordner.

Versuche dies:

find . -name 'P1020804.JPG' -o -name 'P1020805.JPG' -o -name 'P1020806.JPG'

Denken Sie daran, dass dies .notwendig ist.

find . \( -name P1020804.JPG -o \
          -name P1020805.JPG -o \
          -name P1020806.JPG -o \
          -name P1020807.JPG -o \
          -name P1020808.JPG \)

findim aktuellen Verzeichnis- .und Unterverzeichnissen, der Dateiname oder der nächste Dateiname... und so weiter.