De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 27 de março de 2025
A diretiva -execdir do comando find no Linux é uma opção poderosa que
permite executar comandos em arquivos encontrados pelo find, mas com uma
diferença importante: a execução ocorre no diretório em que o arquivo foi
encontrado, e não no diretório de onde o comando find foi executado. Isso
aumenta a segurança, especialmente ao lidar com caminhos que podem ter
permissões inseguras.
A sintaxe básica para usar a diretiva -execdir é:
find caminho_base [opções] -execdir comando {} +
| Opção | Explicação |
|---|---|
caminho_base |
O diretório inicial onde o find deve começar a busca. |
opções |
Critérios de busca (por exemplo, -name, -type, -size, etc.). |
comando |
O comando que você deseja executar para cada arquivo encontrado. |
{} |
Um marcador de posição que será substituído pelo nome do arquivo atual. |
+ |
indica que múltiplos arquivos devem ser passados de uma só vez para o comando que está sendo executado. Isso é diferente de \;, que executaria o comando uma vez para cada arquivo encontrado. |
Por exempo, para encontrar todos os arquivos .txt em um diretório e listar seus conteúdos
usando o comando cat:
$ find /caminho/para/diretorio -name "*.txt" -execdir cat {} \;
A principal diferença entre -execdir e -exec é onde o comando é
executado:
-exec: Executa o comando a partir do diretório a partir do qual o comando
find foi invocado.
-execdir: Executa o comando a partir do diretório onde o arquivo foi
encontrado.
Essa distinção é crucial quando o comando precisa operar relativemente ao local dos arquivos encontrados.
Usar a diretiva -execdir apresenta as seguintes vantagens:
-execdir pode simplificar
o caminho necessário.
Sempre teste seus comandos com cuidado, especialmente quando usar o comando
rm ou comandos que alteram dados.
Combine -execdir com outros filtros do find como -type para
especificar tipos de arquivos, ou -mtime para modificar tempos para
buscas mais precisas.
Use -okdir em vez de -execdir se quiser uma confirmação antes de
executar cada comando para maior segurança.
Vejamos um exemplo mais avançado de uso.
Digamos que você queira compactar todos os arquivos .log em diferentes
subdiretórios, criando um arquivo .zip para cada um:
$ find /caminho/para/logs -name "*.log" -execdir zip "{}.zip" "{}" \;
Esse comando cria um arquivo zip para cada arquivo .log encontrado, dentro
do diretório onde o arquivo original está localizado.