Я не гуру серверов (к сожалению), но хорошо разбираюсь в Linux и BSD. Я пытаюсь создать символическую ссылку на несколько экземпляров HLDS (игровой сервер), но мне нужно исключить определенные папки и файлы конфигурации, чтобы добиться этого должным образом. Мне нужно сделать это таким образом, поскольку HLDS автоматически загружает многие моды, и установка исключения для отключения модов не работает для всех из них.
так что в основном я хочу:
/ home / user / hlds-install (базовая установка)
/ домашний / пользователь / сервер1
/ домашний / пользователь / сервер2
и т.д...
а затем иметь возможность вручную помещать любые конфигурации / моды, исключенные в каталог сервера, чтобы каждый сервер мог быть настроен индивидуально.
Может ли кто-нибудь сказать мне, как это сделать, возможно, какой-то сценарий bash, чтобы я мог просто менять цели, чтобы запускать его каждый раз, когда я хочу создать новый. У меня есть довольно много вещей, которые нужно сделать, поэтому делать все вручную для каждого из них определенно не вариант, и я все для того, чтобы работать умнее, а не усерднее!
Спасибо :)
Я предполагаю, что вы действительно имеете в виду "символическую ссылку на все внутри папки" ...
Концептуально вам нужно что-то вроде:
for each file in base folder not in exclude list
create symlink in target folder pointing back to base folder
done
логика bash для достижения этого выглядит примерно так
#! /bin/bash
exclude=( "foo.conf" "bar.conf" )
for file in *; do
for (( index = 0; index < ${#exclude[@]}; index++ )); do
if [[ ${file} != ${exclude[${index}]} ]]; then
ln -s ${file} ${target}/${file}
fi
done
done
Если вы еще не знаете, Расширенное руководство по сценариям на Bash должен дать вам достаточно, чтобы понять, какие глобусы вы хотите (возможно, find
) и как преобразовать это в функцию (возможно, рекурсивную).
Вы могли бы (ab) использовать xstow. Эта программа предназначена для заполнения леса символических ссылок, который близок к тому, что вы хотите. У него нет возможности исключить некоторые файлы, но вы можете его взломать. Для каждого сервера:
cd .../targets/server1 touch .exclude for x in файлы для исключения; do mkdir -p "$(dirname "$x")"; ln .exclude "$x"; done xstow -d .../sources -t . server1-specific-files xstow -f -d .../sources -t . base-install find -samefile .exclude -exec rm {} +