Thu 09 Sep 2010 10:47:42 PM UTC, original submission:
A naive user (e.g., I until a few minutes ago) would expect both of these commands
find -exec false \; -o -print
find -exec false '{}' \+ -o -print
to print all the files in the directory tree. Instead, the former prints everything and the latter prints nothing: i.e., the multi-argument form of "-exec" always returns true.
Since the documentation doesn't say anything about the truth values differing between the two forms of the statement, it seems natural to expect that, if -exec foo {} + invokes
foo file1 file2 ...
then the truth value at each file used in the invocation would be equal to the truth value of the whole invocation.
After thinking about it a little while, I see that we might need the truth value for file1 before we can decide whether to feed file2 to the command, so there may not be a logical way to fix this. In any case, the documentation should accurately describe the behavior of the '+' variant of the commands.
(In my own selfish interest, I should point out that the way I'm using this feature would actually work fine if the truth value were always "true" for every file but the last one in a command invocation, which is logically possible to implement.)
|