find /var
instrui find
para iniciar a pesquisa no diretório /var
.
-name "[0-9]*test[A-Z]"
é o padrão de pesquisa para instruir find
a retornar apenas arquivos / pastas que correspondem ao padrão "[0-9]*test[A-Z]"
. Se você não citar a string de pesquisa, seu shell expandiria esse padrão de pesquisa e tentaria executar o resultado. Ao citar o padrão de pesquisa, você o passa como um argumento para find /var -name
.
A parte -exec...
da pergunta original tem um erro de sintaxe e deve ser -exec {} /root/{} ';'
(anote o espaço antes de ';'
como comentada por sobremesa e margarida).
Instrui find
a executar os argumentos a seguir, em que {}
é substituído pelo resultado da pesquisa de find
. Você normalmente deve citá-los também para evitar a expansão do shell.
Por fim, o ';'
define como a seção -exec
deve manipular os resultados da pesquisa ao executar o comando. ';'
instrui a localizar o comando -exec
para cada resultado de busca. Ao usar '+'
, o comando -exec
é executado com todos os resultados de busca expandidos. Isso também tem que ser citado ou escapado para evitar que o shell o expanda e faça um argumento para find...-exec
.
Um pequeno exemplo que ilustra a diferença entre ";"
e "+"
é o seguinte.
[user@localhost test]$ find . -name "[0-9]*test[A-Z]" -exec echo "{}" ";"
./12ltestA
./1ltestA
[user@localhost test]$ find . -name "[0-9]*test[A-Z]" -exec echo "{}" "+"
./12ltestA ./1ltestA