Como usar argumentos com 'find -exec'? [duplicado]

7

Estou tentando gerar arquivos html estáticos para todos os scripts php dentro do diretório:

find . -name "*.php" -exec php {} > {}.html \;

Mas apenas despeja todos os resultados para {}.html . Como fazer isso corretamente? E como remover '.php' de nomes de arquivos?

    
por Poma 05.06.2013 / 13:56

3 respostas

7

Esta deve ser a maneira ainda mais eficiente e portátil:

find . -name "*.php" -exec sh -c \
   'for i; do php "$i" > "$(dirname "$i")/$(basename "$i" .php).html"; done' sh {} +

ou o mais simples e ainda mais portátil graças aos comentários de Stephane Chazelas:

find . -name "*.php" -exec sh -c \
   'for i do php "$i" > "${i%.*}.html"; done' sh {} +

O último também corrige a questão do nome do diretório estranho que Stephane notou.

    
por 05.06.2013 / 14:15
1

rename é uma solução muito legível:

shopt -s extglob
rename --no-act --verbose 's/php$/html/' /path/to/parent/dir/**/*.php

Remova --no-act se estiver correto.

    
por 05.06.2013 / 15:24
1

Entendi

find . -name "*.php" | sed "s/\.php//" | xargs -i sh -c 'php "{}.php" > "{}.html"'
    
por 05.06.2013 / 14:03