rsync's исключает опцию, действительно не поддерживает regex, это - больше оболочки globbing сопоставление с образцом.
Если те каталоги довольно статичны, необходимо просто перечислить их в файле и использовании --exclude-from=/full/path/to/file/exclude_directories.txt
.
Обновленный для обеспечения примера
Во-первых, Вы просто помещаете каталоги в файл:
find . -type d -regex '.*/[0-9]*$' -print > /tmp/rsync-dir-exlcusions.txt
или
( cat <<EOT
123414
42344523
345343
2323
EOT ) > /tmp/rsync-directory-exclusions.txt
затем можно сделать работу rsync:
rsync -avHp --exclude-from=/tmp/rsync-directory-exclusions.txt /path/to/source/ /path/to/dest/
Вам просто нужен дополнительный шаг для установки текстового файла, который содержит каталоги для исключения, 1 на строку.
Следует иметь в виду, что путь каталогов в задании, их относительный путь к тому, как rsync видит каталог.
Во-первых, не делайте свои имена функций тем же как команды найденный в нормальных системах. mail
стандартная команда Unix, я полностью неправильно понял Ваш сценарий, потому что я думал, что Вы использовали его.
Во-вторых, Вы, вероятно, не должны писать что материал в файл сообщений вообще. Вместо этого возьмите mail
функция из всех мест в Вашем сценарии. Вместо этого просто выведите содержание к STDOUT. Использовать echo
, grep
или безотносительно других инструментов Вы используете для сбора содержания, которое Вы хотите отправить.
Затем перенесите всю часть своего сценария, который включает вывод, который будет отправлен по почте внутри {}
так, чтобы весь вывод был сплочен, и передайте ЭТО ПО КАНАЛУ к почте вместо этого.
echo "Enter start hour"
read var # stuff to do that won't get output to mail
{
echo "Heading for mail:"
grep stuff...
function_that_outputs
echo "Next heading:"
grep more_stuff...
another_function
} | send_to_administrator
function send_to_administrator () {
/bin/mail -s "$SUBJET" "$EMAIL"
echo "Confirm mail sent."
}
`echo $var`
совпадает с $var
(если $var
начинается с a -
или концы с символом новой строки или (с некоторыми оболочками) содержат обратные косые черты). Кроме того, если Вы действительно не предназначали для значения $var
чтобы использоваться в качестве списка шаблонов шарика, необходимо записать "$var"
(если Вы не знаете, что значение не будет содержать специальных символов — но более просто просто всегда двойные кавычки использования вокруг подстановок переменных). Если Вы хотите выполнить два повторения цикла, тот где bar
значение var
и тот, где bar
значение var2
, затем просто запишите
for bar in "$var" "$var2"; do
func "$bar"
done
elif
не имеет никакого смысла.
– Gilles 'SO- stop being evil'
10.07.2011, 12:11
основной функция. их называют тем же путем, Вы звоните затем в основное