如何使用带有“find -exec”的参数?

Pom*_*oma 8 shell find io-redirection

我正在尝试为目录中的所有 php 脚本生成静态 html 文件:

find . -name "*.php" -exec php {} > {}.html \;
Run Code Online (Sandbox Code Playgroud)

但它只是将所有结果转储到{}.html. 如何正确操作?以及如何从文件名中删除“.php”?

jll*_*gre 8

这应该是更有效的便携方式:

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

或者更简单,更便携,感谢 Stephane Chazelas 的评论:

find . -name "*.php" -exec sh -c \
   'for i do php "$i" > "${i%.*}.html"; done' sh {} +
Run Code Online (Sandbox Code Playgroud)

后者还修复了 Stephane 指出的奇怪的目录名称问题。


Pom*_*oma 1

知道了

find . -name "*.php" | sed "s/\.php//" | xargs -i sh -c 'php "{}.php" > "{}.html"'
Run Code Online (Sandbox Code Playgroud)