Vous avez choisi un excellent ensemble d'outils pour ce travail !
Générer une liste de fichiers que vous voulez éditer est très simple - je suppose ici que vous utilisez un Shell qui développera la sortie des noms de fichiers correspondants, comme bash, ou dash :
echo /home/*/site/assets/.htaccess > list.txt
Toutefois, si *
peut signifier plus d'un niveau de répertoires, j'irais avec ceci :
find -name '.htaccess' /home | grep '/site/assets/sym' > list.txt
Votre Shell va développer l'expression en une liste, et rediriger la sortie vers list.txt. Un fichier pour chaque ligne.
Vous pouvez également rechercher les fichiers nommés .htaccess avec find - pour voir s'il y en a un que vous avez manqué, comme ceci :
find -name '.htaccess' /home
Ajout de sauts de ligne dans le texte de remplacement - cela dépend un peu de votre éditeur. Les sauts de ligne sont généralement représentés par \n
Ce que vous voulez faire, peut probablement être réalisé avec un petit Shell-Shell - quand for variable in expression; do .... done
est utilisé, il exécutera les lignes entre do/done une fois pour chaque mot de l'expression. NOTE : Cela peut se retourner contre vous si les chemins contiennent des espaces.
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
(Cela laissera un fichier nommé .htaccess.old à sa place).
Réécrit pour une approche alternative de collecte de listes :
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
Ou, en une ligne, sans prendre de sauvegarde :
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
0 votes
Ce site n'est pas destiné à donner des conseils en matière de programmation. Donc, juste un indice : Perl peut le faire ! Et il y a plus d'une solution pour cela.
1 votes
C'est vrai, mais il s'agit d'une tâche typique de l'administrateur système ? Je ne le signalerais pas pour le déplacer, mais c'est peut-être juste moi.