A página de manual (ou o manual GNU online ) explica praticamente tudo.
comando find -exec {} \;
Para cada resultado, command {}
é executado. Todas as ocorrências de {}
são substituídas pelo nome do arquivo. ;
é prefixado com uma barra para evitar que o shell o interprete.
comando find -exec {} +
Cada resultado é anexado command
e executado posteriormente. Levando em conta as limitações de comprimento do comando, acho que este comando pode ser executado mais vezes, com a página do manual me apoiando:
o número total de invocações do comando será muito menor do que o número de arquivos correspondentes.
Observe esta citação da página do manual:
A linha de comando é construída da mesma forma que o xargs constrói suas linhas de comando
É por isso que nenhum caractere é permitido entre {}
e +
exceto para espaços em branco. +
faz o find detectar que os argumentos devem ser acrescentados ao comando da mesma forma que xargs
.
A solução
Felizmente, a implementação GNU de mv
pode aceitar o diretório de destino como um argumento, com um -t
ou o parâmetro mais longo --target
. Seu uso será:
mv -t target file1 file2 ...
Seu find
comando se torna:
find . -type f -iname '*.cpp' -exec mv -t ./test/ {} \+
Na página do manual:
comando -exec;
Execute o comando; true se 0 status for retornado. Todos os seguintes argumentos a serem encontrados são considerados argumentos para o comando até um argumento que consiste em `; ' é encontrado. A string `{} 'é substituída pelo nome do arquivo atual sendo processado em todos os lugares em que ocorre nos argumentos do comando, não apenas nos argumentos onde está sozinho, como em algumas versões de find. Ambas as construções podem precisar de escape (com um `\ ') ou entre aspas para protegê-las da expansão pelo shell. Consulte a seção EXEMPLOS para obter exemplos do uso da opção -exec. O comando especificado é executado uma vez para cada arquivo correspondente. O comando é executado no diretório inicial. Existem problemas de segurança inevitáveis em torno do uso da ação -exec; você deve usar a opção -execdir.
-exec comando {} +
Esta variante da ação -exec executa o comando especificado nos arquivos selecionados, mas a linha de comando é construída anexando cada nome de arquivo selecionado no final; o número total de invocações do comando será muito menor do que o número de arquivos correspondentes. A linha de comando é construída da mesma maneira que xargs constrói suas linhas de comando. Apenas uma instância de `{} 'é permitida no comando. O comando é executado no diretório inicial.