Моя хостинговая компания объявляет о максимальном размере загрузки php, который может достигать 60M, но по умолчанию он равен 2M, и я не могу внести изменения в файл htaccess. Я могу переопределить настройки по умолчанию, изменив файлы php.ini, но это необходимо сделать для каждого файла php.ini в дереве каталогов. То, что мне и многим пользователям нужно и нужно просить, - это скрипт BASH, который выполнит следующую задачу:
Я понял, как найти. -файл php.ini и добавьте (не правильно) две строки, которые нужно добавить.
Даже при этом, если я пойму, как правильно добавить строки, если запустить снова, они добавят строки снова. Не только к новым файлам, которые нужно исправить.
Если бы кто-нибудь мог помочь мне с частью
find . -ifile php.ini -exec ?????? '{}' \;
, я бы сам смог понять, как сделать все остальное.
Я выбрал бы этот подход:
#!/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')
Некоторые примечания:
$path
объявляется / инициализированным внутренне, но это может быть передано как аргумент сценарию с очень немногими / мало модификаций если более удобный;find "$path" -type f -name 'php.ini'
выполняется во внешней оболочке, и ее вывод перенаправляется к while
цикл с помощью замены процесса, потому что, передавая ее вывод по каналу непосредственно к while
цикл уехал бы $line1
и $line2
из while
объем цикла;-type f
в find "$path" -type f -name 'php.ini'
могло бы быть избыточным, но только быть безопасным;echo
команды, возможно, были объединены в сингл echo
команда, но это потребовало бы для добавления -e
опция выйти \n
последовательность; не зная, что точные строки добавляются (который мог бы содержать другие escape-последовательности), не используя -e
опция и использование два echo
команды более безопасны;Поиски сценария, рекурсивно, для любого файла называют php.ini
в $path
путь; для каждого файла, если оба grep
команды в if
оператор не возвращается 0
(т.е. если ни один строка, содержащая / соответствие $line1
строка, ни строка, содержащая / соответствие $line2
строка найдена в файле), $line1
и $line2
добавляются в конце файла.
Демонстрационный вывод на тестовой иерархии:
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