find . -type d -exec chmod 755 {} + -or -type f -exec chmod 644 {} +
find ... -exec ... +
é como find ... -exec ... \;
, exceto que o comando é executado apenas uma vez por grande conjunto de arquivos correspondentes.
Era uma vez, find OPTIONS... -exec COMMAND... \;
teve que agir em um arquivo de cada vez. Portanto, xargs
foi inventado para agrupar ações para eficiência. Mas xargs
apresentou sua própria parcela de problemas: espera que a entrada seja citada de maneira que find
não possa produzir. Portanto, find OPTIONS... | xargs COMMAND...
não é bom, a menos que você saiba que os nomes dos arquivos não contêm '"\
ou espaço em branco.
Em seguida, o GNU inventou find OPTIONS... -print0 | xargs -0 COMMAND...
, o que permite que qualquer caractere apareça em um nome de arquivo. Mas demorou muito tempo para qualquer outra pessoa adotá-lo e, enquanto isso, Sun (eu acho) inventou find OPTIONS... -exec COMMAND... +
, que faz o mesmo trabalho de agrupamento de xargs
, sem as complicações adicionais (linha de comando mais longa, limite a um por find
comando). Agora find ... -exec ... +
é padrão (está em Unix único v3 ), e mais amplamente disponível que% código%. A menos que você tenha que manter a compatibilidade com um sistema Linux antigo, apenas esqueça xargs -0
.