如何将下面的代码附加到目录及其子目录中的大量php文件的末尾:
</div> <div id="preloader" style="display:none;position: absolute;top: 90px;margin-left: 265px;"> <img src="ajax-loader.gif"/> </div>
我已经试过了:
echo "my text" >> *.php
但终端显示错误:
bash : *.php: ambiguous redirect
mwngjboj1#
我通常使用发球台,因为我认为它看起来有点干净,它一般适合在一条线上。
echo "my text" | tee -a *.php
xvw2m8pv2#
如果不指定shell,可以尝试使用foreach命令。在tcsh下(我相信bash也有类似的版本),可以交互地输入如下内容:
foreach
foreach i (*.php) foreach> echo "my text" >> $i foreach> end
$i将在每次通过循环时采用每个文件的名称。与往常一样,在对大量文件执行操作时,最好在一个包含示例文件的小目录中测试这些文件,以确保它能按预期工作。在错误消息中出现了bash(我将用它标记您的问题)。
$i
bash
for i in *.php do echo "my text" >> $i done
如果要覆盖所在目录下的多个目录,可以指定
* /*.php
而不是*.php
*.php
ukxgm1gy3#
BashFAQ/056很好地解释了为什么你所尝试的东西不起作用。看看吧。因为您使用的是bash(根据您的错误),所以for命令是您的朋友。
for
for filename in *.php; do echo "text" >> "$filename" done
如果你想从文件中提取“文本”,你可以这样做:
for filename in *.php; do cat /path/to/sourcefile >> "$filename" done
现在...您 * 可能 * 在子目录中有文件。如果是这样,您可以使用find命令来查找和处理它们:
find
find . -name "*.php" -type f -exec sh -c "cat /path/to/sourcefile >> {}" \;
find命令使用-name和-type这样的条件来识别哪些文件,然后-exec命令基本上运行我在前面的“for”循环中展示的内容。最后的\;向find指示这是-exec选项的参数的结尾。你可以man find了解更多关于这方面的细节。find命令是可移植的,通常推荐用于这类活动,特别是如果您希望您的解决方案能够移植到其他系统。但是,由于您当前使用的是bash,因此您也可以使用bash的globstar选项来处理子目录:
-name
-type
-exec
\;
man find
globstar
shopt -s globstar for filename in**/*.php; do cat /path/to/sourcefile >> "$filename" done
您可以man bash并搜索“globstar”以获得更多有关此操作的详细信息。此选项需要bash版本4或更高版本。
man bash
注意:您可能会遇到其他问题。PHP脚本不需要以?>结尾,因此您可能会添加HTML,脚本会尝试将其解释为PHP代码。
?>
qmelpv7a4#
您可以将sed与find结合使用。假设您的项目树为
sed
/MyProject/ /MyProject/Page1/file.php /MyProject/Page2/file.php etc.
1.保存要追加到/MyProject/上的代码。将其命名为append.txt
/MyProject/
append.txt
find . -name "*.php" -print | xargs sed -i '$r append.txt'
请说明:
xargs
-i
来源:http://www.grymoire.com/unix/Sed.html#uh-37
vxqlmq5t5#
您可以执行(即使文件路径中有空间也执行):
# !/bin/bash # Create a tempory file named /tmp/end_of_my_php.txt cat << EOF > /tmp/end_of_my_php.txt </div> <div id="preloader" style="display:none;position: absolute;top: 90px;margin-left: 265px;"> <img src="ajax-loader.gif"/> </div> EOF find . -type f -name "*.php" | while read the_file do echo "Processing $the_file" #cp "$the_file" "${the_file}.bak" # Uncomment if you want to save a backup of your file cat /tmp/end_of_my_php.txt >> "$the_file" done echo echo done
PS:你必须从你想浏览的目录运行脚本
2ul0zpep6#
灵感来自@Dantastic答案:
echo "my text" | tee -a file1.txt | tee -a file2.txt
6条答案
按热度按时间mwngjboj1#
我通常使用发球台,因为我认为它看起来有点干净,它一般适合在一条线上。
xvw2m8pv2#
如果不指定shell,可以尝试使用
foreach
命令。在tcsh下(我相信bash也有类似的版本),可以交互地输入如下内容:$i
将在每次通过循环时采用每个文件的名称。与往常一样,在对大量文件执行操作时,最好在一个包含示例文件的小目录中测试这些文件,以确保它能按预期工作。
在错误消息中出现了
bash
(我将用它标记您的问题)。如果要覆盖所在目录下的多个目录,可以指定
而不是
*.php
ukxgm1gy3#
BashFAQ/056很好地解释了为什么你所尝试的东西不起作用。看看吧。
因为您使用的是bash(根据您的错误),所以
for
命令是您的朋友。如果你想从文件中提取“文本”,你可以这样做:
现在...您 * 可能 * 在子目录中有文件。如果是这样,您可以使用
find
命令来查找和处理它们:find
命令使用-name
和-type
这样的条件来识别哪些文件,然后-exec
命令基本上运行我在前面的“for”循环中展示的内容。最后的\;
向find
指示这是-exec
选项的参数的结尾。你可以
man find
了解更多关于这方面的细节。find
命令是可移植的,通常推荐用于这类活动,特别是如果您希望您的解决方案能够移植到其他系统。但是,由于您当前使用的是bash
,因此您也可以使用bash的globstar
选项来处理子目录:您可以
man bash
并搜索“globstar”以获得更多有关此操作的详细信息。此选项需要bash版本4或更高版本。注意:您可能会遇到其他问题。PHP脚本不需要以
?>
结尾,因此您可能会添加HTML,脚本会尝试将其解释为PHP代码。qmelpv7a4#
您可以将
sed
与find
结合使用。假设您的项目树为1.保存要追加到
/MyProject/
上的代码。将其命名为append.txt
/MyProject/
运行:请说明:
find
实际上是这样做的,它查找所有.php,包括子目录xargs
将对所有刚找到的.php传递(即运行)sed
sed
将执行附加操作。“$r append.txt”表示转到文件的末尾($)并将append.txt中的内容写入(粘贴)到那里。不要忘记-i
,否则它只会打印出附加的文件,而不会保存它。来源:http://www.grymoire.com/unix/Sed.html#uh-37
vxqlmq5t5#
您可以执行(即使文件路径中有空间也执行):
PS:你必须从你想浏览的目录运行脚本
2ul0zpep6#
灵感来自@Dantastic答案: