BashFAQ/056很好地解释了为什么您尝试的方法不起作用。看一看。
由于您使用的是 bash (根据您的错误),因此该for
命令是您的朋友。
for filename in *.php; do
echo "text" >> "$filename"
done
如果您想从文件中提取“文本”,您可以这样做:
for filename in *.php; do
cat /path/to/sourcefile >> "$filename"
done
现在......您可能在子目录中有文件。如果是这样,您可以使用find
命令来查找和处理它们:
find . -name "*.php" -type f -exec sh -c "cat /path/to/sourcefile >> {}" \;
该命令使用和之find
类的条件识别哪些文件,然后该命令的运行与我在前面的“for”循环中向您展示的基本相同。final表示这是选项参数的结尾。-name
-type
-exec
\;
find
-exec
您可以man find
了解有关此的更多详细信息。
该find
命令是可移植的,通常建议用于此类活动,特别是如果您希望您的解决方案可移植到其他系统。但是由于您当前正在使用bash
,您还可以使用 bash 的globstar
选项来处理子目录:
shopt -s globstar
for filename in **/*.php; do
cat /path/to/sourcefile >> "$filename"
done
您可以man bash
搜索“globstar”以获取更多详细信息。此选项需要 bash 版本 4 或更高版本。
注意:您正在做的事情可能还有其他问题。PHP 脚本不需要以 结尾?>
,因此您可能会添加脚本将尝试解释为 PHP 代码的 HTML。