Ma société d'hébergement annonce une taille de téléchargement php max pouvant aller jusqu'à 60M mais, par défaut, elle est de 2M et je ne suis pas en mesure d'apporter des modifications au fichier htaccess. Je peux remplacer la valeur par défaut en modifiant les fichiers php.ini mais cela doit être fait pour chaque fichier php.ini dans l'arborescence de répertoires. Ce dont beaucoup d'utilisateurs et moi-même avons besoin et que nous implorons, c'est un script BASH qui fera la tâche suivante;
J'ai trouvé comment trouver. -ifile php.ini et ajouter (pas correctement) les deux lignes devaient être ajoutées.
Même avec cela, si je découvre comment ajouter correctement les lignes s'il est exécuté à nouveau, il ajoutera à nouveau les lignes. Pas seulement aux nouveaux fichiers qui doivent être corrigés.
si quelqu'un pouvait m'aider
find . -ifile php.ini -exec ?????? '{}' \;
je pourrais comprendre comment faire le reste moi-même.
Je choisirais cette approche:
#!/bin/bash
path='/path'
line1='foo'
line2='bar'
while read f; do
if [ ! "$(grep "$line1" "$f")" ] && [ ! "$(grep "$line2" "$f")" ]; then
echo "$line1" >> "$f"
echo "$line2" >> "$f"
fi
done < <(find "$path" -type f -name 'php.ini')
Quelques notes:
$path
est déclaré/initialisé en interne, mais il peut très bien être passé en argument au script avec très peu/peu de modifications si cela est plus commode;find "$path" -type f -name 'php.ini'
est exécuté dans un shell externe et sa sortie est redirigée vers la boucle while
à l'aide d'une substitution de processus, car la canalisation de sa sortie directement vers la boucle while
aurait laissé $line1
et $line2
hors de la portée de la boucle while
;-type f
dans find "$path" -type f -name 'php.ini'
peut être redondant, mais juste pour être sûr;echo
auraient pu être fusionnées en une seule commande echo
, mais cela aurait nécessité d'ajouter une -e
option pour échapper au \n
séquence; sans connaître les chaînes exactes à ajouter (qui peuvent contenir d'autres séquences d'échappement), sans utiliser de -e
et utiliser deux commandes echo
est plus sûr;Le script recherche, récursivement, tout fichier nommé php.ini
dans le $path
chemin; pour chaque fichier, si les deux commandes grep
dans l'instruction if
Don't return 0
(c'est-à-dire si ni une ligne contenant/correspondant à $line1
chaîne ni ligne contenant/correspondant à $line2
chaîne se trouve dans le fichier), $line1
et $line2
sont ajoutés à la fin du fichier.
Exemple de sortie sur une hiérarchie de test:
user@debian ~/tmp % tree -a
.
├── 1
│ ├── 2
│ │ ├── 3
│ │ │ ├── file
│ │ │ └── php.ini
│ │ ├── file
│ │ └── php.ini
│ ├── file
│ └── php.ini
└── script.sh
3 directories, 7 files
user@debian ~/tmp % find 1 -type f -exec bash -c 'echo -e "{}:\n"; cat {}; echo' \;
1/php.ini:
foo
bar
another line
1/file:
foo
bar
another line
1/2/3/php.ini:
foo
bar
another line
1/2/3/file:
foo
bar
another line
1/2/php.ini:
just one line
1/2/file:
foo
bar
another line
user@debian ~/tmp % bash script.sh
user@debian ~/tmp % find 1 -type f -exec bash -c 'echo -e "{}:\n"; cat {}; echo' \;
1/php.ini:
foo
bar
another line
1/file:
foo
bar
another line
1/2/3/php.ini:
foo
bar
another line
1/2/3/file:
foo
bar
another line
1/2/php.ini:
just one line
foo
bar
1/2/file:
foo
bar
another line