find ... -execdir command {} +
não faz nada disso.
Funciona exatamente da mesma forma que find ... -exec
, exceto que find
primeiro altera o diretório para o diretório em que os arquivos correspondentes estão antes de executar o comando.
Execute man find
(ou, se estiver usando o GNU find, info find
ou pinfo find
para obter uma documentação mais detalhada) e procure por -execdir
.
Na página do GNU find
man:
-execdir command ;
-execdir command {} +
Like -exec
, but the specified command is run from the subdirectory containing the matched file, which is not normally the directory in which you started find. This a much more secure method for invoking commands, as it avoids race conditions during resolution of the paths to the matched files.
As with the -exec
action, the +
form of -execdir
will build a command line to process more than one matched file, but any given invocation of command will only list files that exist in the same subdirectory.
If you use this option, you must ensure that your $PATH
environment variable does not reference .
; otherwise, an attacker can run any commands they like by leaving an appropriately-named file in a directory in which you will run -execdir
.
The same applies to having entries in $PATH
which are empty or which are not absolute directory names. If find encounters an error, this can sometimes cause an immediate exit, so some pending commands may not be run at all.
The result of the action depends on whether the +
or the ;
variant is being used; -execdir command {} +
always returns true, while -execdir command {} ;
returns true only if command returns 0.
Observe que, mesmo que a extração man page não a mencione, o ;
deve ser salvo como \;
se for executado a partir de uma linha de comando ou script do shell, para que o shell não o interprete como o final do comando find
, em vez de ser passado como um argumento para find
para indicar o final do comando find
s -exec
. O +
não precisa ser escapado.