2017-11-16 4 views
0

Ich bin auf der Suche durch viele Unterverzeichnisse und finden Sie alle Dateien, die auf .JPG .jpg und .png und kopieren sie in ein separates Verzeichnis, aber gerade jetzt seine einzige .JPGFinden Befehl mit mehreren Dateierweiterungen

finden

Könnte jemand erklären, was ich falsch mache?

find /root/TEST/Images -name '*.png' -o -name '*.jpg' -o -name '*.JPG' -exec cp -t /root/TEST/CopiedImages {} + 

Antwort

2

Sie zu einer Gruppe haben die -o Bedingungen, weil -a, die implizierte sowie zwischen der letzten -name '*.JPG' und -exec hat higher precedence:

find /root/TEST/Images \(-name '*.png' -o -name '*.jpg' -o -name '*.JPG' \) -exec cp -t /root/TEST/CopiedImages {} + 

Gruppierung wird mit Klammern getan, aber sie haben zu entkommen (oder zitiert) aufgrund ihrer besonderen Bedeutung ist Shell.

Unrelated dazu können Sie den gesamten Ausdruck verkürzen durch Filter für jpg und JPG mit der Groß- und Kleinschreibung -iname (wie erwähnt in den Kommentaren) Vereinigen:

find /root/TEST/Images \(-name '*.png' -o -iname '*.jpg' \) -exec cp -t /root/TEST/CopiedImages {} + 
+0

„Linie 2: Syntaxfehler in der Nähe von unerwartetem Token' ('' ist der Fehler, den ich bekomme, wenn ich diese Codezeile verwende –

+0

Kannst du stattdessen mit zitierten Parens versuchen, ''(' 'und'') '? – randomir

+0

Immer noch ein Fehler: find: Pfade müssen Ausdruck vorausgehen :) Verwendung: find [-H] [-L] [-P] [-Olevel] [-D Hilfe | Baum | Suche | Statistik | Preise | opt | Exec] [Pfad ...] [Ausdruck] –

Verwandte Themen