Für die Befehlsstruktur habe -exec command {} \;
ich Informationen in man find
.
- {} bedeutet
selected files
. - ; bedeutet, das Argument zu beenden.
- \; entkam, um sie vor der Expansion durch die Schale zu schützen.
In dem Absatz zu -exec command {} +
.
-exec command {} +
This variant of the -exec action runs the specified command on
the selected files, but the command line is built by appending
each selected file name at the end; the total number of invoca‐
tions of the command will be much less than the number of
matched files. The command line is built in much the same way
that xargs builds its command lines. Only one instance of `{}'
is allowed within the command, and (when find is being invoked
from a shell) it should be quoted (for example, '{}') to protect
it from interpretation by shells. The command is executed in
the starting directory. If any invocation returns a non-zero
value as exit status, then find returns a non-zero exit status.
If find encounters an error, this can sometimes cause an immedi‐
ate exit, so some pending commands may not be run at all. This
variant of -exec always returns true.
Es wird nie etwas darüber gesagt +
. Was bedeutet + in der Bash -exec command {} +
?
Es bedeutet, das Argument wie zu beenden ;
?
+
bedeutet plus wie 3+5=8
oder concatenate
, um zwei Zeichenfolgen zu einer wie s1
+ zu verbinden s2
.
Es ist eine seltsame Sache eine Bedeutung zuweisen terminate the argument
zu +
.
Antworten:
Es hat nichts mit Bash zu tun, es ist Teil der
find
Syntax. Der Befehl muss wissen, wo die-exec
Aktion endet. Es endet um;
oder um+
. Abhängig vom Abschlusszeichen wird eine geeignete-exec
Aktionsvariante verwendet.Warum wurden diese beiden Charaktere zu diesem Zweck ausgewählt? Ich weiß es nicht. Ein Weg, die
-exec
Aussage zu beenden , war ein Muss und jemand wählte;
und+
. Jetzt sind die Zeichen Teile des POSIX-Standards, wenn es um denfind
Befehl geht.Wir können nur vermuten, dass dies
;
ausgewählt wurde, da es auch einen Befehl in einer Shell beenden kann, sodass der Zweck ähnlich ist. Aus diesem Grund;
muss das aber gesehen werden, indemfind
in der Schale speziell behandelt wird\;
(';'
oder";"
auch funktioniert). Es gibt kein solches Problem mit+
.Technisch hätte fast jede andere Saite gewählt werden können
+
(dasselbe gilt für;
). Beachten Sie, dass-exec
,{}
,+
und;
(nachdem er übergibt die Schale durch Flucht oder zu zitieren), mögliche Tests oder Aktionen wie-type
oder-print
- sie alle sind Argumentefind
; Sie werden bedeutungsvoll, wenn siefind
verarbeitet werden. Ihre Bedeutung ergibt sich aus der Art und Weise, wie siefind
erfunden wurden.Zusammenfassen:
find
, nicht darumbash
.-exec
Aktionen.-exec
Anweisung beenden . Es ist eine Design-Wahl.;
und+
; Es ist eine Design-Wahl.+
(die ich nicht kenne), ist das Trivia, nichts wirklich Bedeutungsvolles. Ich kann nur spekulieren,{} +
ist für "ein Argument oder mehr" wie 10+ manchmal bedeutet "zehn oder mehr".Weiterer Einblick
Wie wäre es mit
"
+
bedeutet plus" ist nicht von Gott. Jemand entschied, andere folgten und das Symbol blieb hängen.+
bedeutet "Plus" in der Mathematik.>
bedeutet in der Mathematik "größer als".>
Weiterleitungen in eine Shell umzuleiten.+
, dass er-exec
imfind
Kontext endet .quelle