我需要将这一行添加到位于/home/*/site/assets/.htaccess中的每个.htaccess文件,其中*可以是任意数量的目录
我需要罚款这个文本
RewriteRule ^(.*)$ /site/assets/sym/$1 [L,NS]
并在其上面添加一行,或者用此replace它
RewriteCond %{REQUEST_URI} !^/site/assets/sym RewriteRule ^(.*)$ /site/assets/sym/$1 [L,NS]
我在网上看过这个网站,但是我不清楚如何处理
任何人都可以提出一个明确解释它的资源,否则,让我知道我是否正在寻找这个工作的正确工具?
我的操作系统是OS OS 5.5,我运行一个LAMP服务器,如果这有很大的区别,Apache 2。
谢谢
您已经为这项工作select了一套出色的工具!
生成你想编辑的文件列表非常简单 – 我在这里假设你正在使用一个shell来扩展匹配文件名的输出,比如bash或者破折号:
echo /home/*/site/assets/.htaccess > list.txt
但是,如果*可能意味着超过1级的目录,我会这样做:
find -name '.htaccess' /home | grep '/site/assets/sym' > list.txt
你的shell将expression式扩展成一个列表,并将输出redirect到list.txt。 每行一个文件。
您还可以使用findsearch名为.htaccess的文件,以查看是否有人错过了,如下所示:
find -name '.htaccess' /home
在replace文本中添加换行符 – 这取决于您的编辑器。 换行符通常表示为\n
你想做什么,可能可以用一个小的shell脚本来实现 – 当for variable in expression; do .... done for variable in expression; do .... done被使用,它将执行do / done之间的每一行的expression式中的行。 注意 :如果path包含空格,这可能会反弹。
for file in /home/*/site/assets/.htaccess; do sed 's/RewriteRule \^(.\*)\$ \/site\/assets\/sym\/\$1 \[L,NS\]/RewriteCond %{REQUEST_URI} !^\/site\/assets\/sym\nRewriteRule \^(.\*)\$ \/site\/assets\/sym\/\$1 \[L,NS\]/g' $file > $file.new mv $file $file.old mv $file.new $file done
(这将在文件名中留下一个名为.htaccess.old的文件。)
重写备用列表收集方法:
for file in $(find -name '.htaccess' /home | grep '/site/assets/sym'); do sed 's/RewriteRule \^(.\*)\$ \/site\/assets\/sym\/\$1 \[L,NS\]/RewriteCond %{REQUEST_URI} !^\/site\/assets\/sym\nRewriteRule \^(.\*)\$ \/site\/assets\/sym\/\$1 \[L,NS\]/g' $file > $file.new mv $file $file.old mv $file.new $file done
或者,在一行中,不需要备份:
for file in /home/*/site/assets/.htaccess; do sed -i 's/RewriteRule \^(.\*)\$ \/site\/assets\/sym\/\$1 \[L,NS\]/RewriteCond %{REQUEST_URI} !^\/site\/assets\/sym\nRewriteRule \^(.\*)\$ \/site\/assets\/sym\/\$1 \[L,NS\]/g' $file; done
您可以使用sed在匹配模式上方插入行,并随时进行备份。
for file in $( find /home -name .htaccess | grep /site/assets/sym); do sed -i.bak '/RewriteRule \^(.\*)\$ \/site\/assets\/sym\/\$1 \[L,NS\]/i RewriteCond %{REQUEST_URI} !^/site/assets/sym' "$file" done