【发布时间】:2012-01-30 06:06:18
【问题描述】:
我知道有很多类似我的小问题的问题。一些被第二个-exec修复了,但这不是我需要的。也许我只是没有看到我的问题到底出在哪里......
我想在我的博客分析输出中匿名化 html 文件中的所有 IP:
#!/usr/bin/perl
use warnings;
use strict;
use readPathsFromConf;
system ("find $readPathsFromConf::WWWPATH$readPathsFromConf::WWWSUBDIR -type f -name \"\*\" -exec sed -i '' 's/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/anonymisiert/g' \{\} \;");
我只得到
find: missing argument to `-exec'
当我在命令行上键入时,我在 STDOUT 上得到了正确的文件:
find /var/www/statistics/ -type f -name "*"
但是一旦我添加了执行部分,我就会得到错误。
转义字符有问题吗? 我错过了什么? (请原谅我的英语)
【问题讨论】:
-
在这种情况下,如果您必须像这样使用
find,请在*周围使用单引号。还可以考虑将命令拆分为数组 (my @cmd = ( "find", "/var/www/statistics/", "-type", "-f", "-name", "*", "-exec", ...);) 中的命令和参数,然后使用system @cmd;。这样可以避免运行 shell 来运行命令。 -
为什么将 * 放在单引号而不是双引号中? Shell 不会扩展其中任何一个中的 glob。