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 .