Использование регулярного выражения в строке перенаправления / добавления heredocument для нацеливания на определенные «наборы» каталогов

Нет, в этом нет необходимости. Раньше я отключал его в большинстве систем.

Однако это может быть полезно. Linux mdadm RAID будет обнаруживать только ошибки, возникающие во время чтения или записи файловой системы RAID. Это задание cron проверки рейда mdadm просто вызывает чтение всего массива raid, чтобы можно было обнаружить ошибки чтения.

Подобным образом и btrfs , и zfs имеют команду scrub , которая заставляет считывать все данные на них .... и чтение данных в этих файловых системах приводит к проверке контрольных сумм, таким образом обнаруживая любые ошибки даже в файлах, к которым нечасто обращаются. zfs scrub или btrfs scrub обычно запускаются из cron еженедельно или ежемесячно.

-1
14.06.2018, 12:53
2 ответа

Я предполагаю, что вы хотите добавить к .htaccessво всех каталогах, таких как $HOME/public_html/foo.com/, $HOME/public_html/bar.biz/и т. д.

Ваш цикл forуже управляет обработкой всех каталогов, тогда вопрос заключается в том, чтобы просто настроить glob, чтобы он соответствовал требуемым окончаниям:

for dir in "$HOME"/public_html/*.{com,biz,co.il}/; do
    cat <<-"EOF" >> "$dir"/.htaccess
        Apache directives...
       ...
    EOF
done 2>myErrors.txt

Похоже, cdне нужен, так как dirуже содержит полный путь к каталогу.

Приведенное выше, конечно, будет соответствовать только перечисленным доменам верхнего -уровня. (Я не уверен, что вы этого хотите, поскольку вы написали «или другие ДВУ».)Если вам все равно, какой TLD находится в имени каталога, просто используйте .../public_html/*/или .../public_html/*.*/, хотя это все равно предполагает, что там больше ничего нет. (Но с другой стороны, перечисление всех TLD несколько неудобно, и они могут придумать больше...)

3
28.01.2020, 05:06

Использование tee -aдля добавления к ряду файлов и раскрытие фигурной скобки.

Я также не думаю, что цикл на самом деле нужен, так как teeвыполняет работу по одновременной записи в несколько файлов.

cat <<-"EOF" | tee -a "$HOME"/public_html/*.{com,biz,co.il}/.htaccess
       Apache_directive_set_1
       Apache_directive_set_2
EOF

Строка

"$HOME"/public_html/*.{com,biz,co.il}/.htaccess

будет расширен до

/home/something/public_html/*.com/.htaccess /home/something/public_html/*.biz/.htaccess /home/something/public_html/*.co.il/.htaccess

и затем глобусы сделают свою работу, сопоставляя соответствующие подкаталоги.

Если существует риск того, что глобус может не соответствовать чему-либо, вам, вероятно, следует также установить параметр оболочки nullglobвbash:

shopt -s nullglob

Если этот параметр установлен, шаблон глобуса, который не соответствует ни одному существующему имени файла, будет расширен до пустой строки.


Если шаблон "$HOME"/public_html/*.{com,biz,co.il}/.htaccessрасширяется до слишком длинной строки, у вас могут возникнуть проблемы с запуском tee. В этом случае вам нужна петля:

for dir in "$HOME"/public_html/*.{com,biz,co.il}/
do
    cat <<-"EOF" >>"$dir/.htaccess"
           Apache_directive_set_1
           Apache_directive_set_2
    EOF
done

Тем не менее, по-прежнему нет необходимости cdзаходить в каталоги.

2
28.01.2020, 05:06

Теги

Похожие вопросы