咨询:通过PuTTY执行SSH批量替换文件夹文件中字符串的正确命令
在PuTTY中通过SSH批量替换文件夹内所有文件的指定文本
这需求用Linux下的find+sed组合就能轻松搞定,分几种场景给你具体命令:
1. 替换目标文件夹下所有文件的指定文本
假设你的目标文件夹路径是/var/www/your-site,要把所有文件里的John全局替换成Bill,直接运行这条命令:
find /var/www/your-site -type f -exec sed -i 's/John/Bill/g' {} +
命令拆解:
find /var/www/your-site:指定要遍历的根文件夹-type f:只处理普通文件,跳过目录和特殊文件-exec sed -i 's/John/Bill/g' {} +:对找到的每个文件执行sed替换操作-i:直接原地修改文件(不用输出到新文件再替换)s/John/Bill/g:正则替换规则,g表示全局替换(每行所有匹配的John都会被换掉,不加g只换每行第一个)
2. 只替换特定扩展名的文件
如果只想替换.php和.html这类特定格式的文件,加个文件名过滤即可:
find /var/www/your-site -type f \( -name "*.php" -o -name "*.html" \) -exec sed -i 's/John/Bill/g' {} +
注意这里的\( ... \)是把多个文件名条件组合起来,避免shell解析出错。
重要注意事项
- 先测试再执行:如果不确定替换效果,可以先拿单个文件测试,比如
sed 's/John/Bill/g' test-file.php,会输出替换后的内容,不会修改原文件 - 备份文件(可选但推荐):怕误操作的话,可以让sed自动生成备份文件,命令改成:
替换完成后,所有原文件会生成find /var/www/your-site -type f -exec sed -i.bak 's/John/Bill/g' {} +.bak后缀的备份,确认没问题后可以批量删除备份:find /var/www/your-site -name "*.bak" -delete - BSD/MacOS兼容提示:如果你的服务器是BSD系统或者MacOS,
sed -i需要加一个空后缀,比如sed -i '' 's/John/Bill/g',不过用PuTTY连的大多是Linux服务器,这条可以忽略。
内容的提问来源于stack exchange,提问作者Bakar
相关产品推荐
相关产品推荐

