Как сделать символическую ссылку на папки и исключить определенные файлы
Я не гуру сервера (к сожалению), но имею приличное знание linux & bsd. Я пытаюсь создать символическую ссылку на несколько экземпляров HLDS (игрового сервера), но мне нужно исключить определенные папки и файлы конфигурации, чтобы добиться этого должным образом. Мне нужно сделать это таким образом, так как HLDS автоматически загружает много модов, и включение исключения для отключения модов не работает для всех из них.
так что в основном я хочу:
/ home / user / hlds-install (базовая установка)
/ Главная / пользователь / сервер1
/ Главная / пользователь /server2
так далее...
и затем иметь возможность вручную помещать любые конфигурации / моды, которые я исключил, в директории сервера, чтобы каждый сервер можно было настраивать индивидуально.
Может кто-нибудь сказать мне, как это сделать, возможно, какой-то сценарий bash, чтобы я мог просто менять цели, чтобы запускать его каждый раз, когда я хочу создать новый. У меня есть целый ряд, чтобы сделать так, что делать все это вручную для каждого из них определенно не вариант, и я все для работы умнее, а не усерднее!
Спасибо:)
2 ответа
Я предполагаю, что вы действительно имеете в виду "символическая ссылка все внутри папки"...
Концептуально, вы хотите что-то вроде:
for each file in base folder not in exclude list
create symlink in target folder pointing back to base folder
done
логика Баш для достижения этого идет что-то вроде
#! /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.../target /server1 коснуться.exclude для х в файлах, чтобы исключить; do mkdir -p "$(dirname "$ x")"; ln .exlude "$x"; сделанный xstow -d .../sources -t . сервер1 специфичные-файлы xstow -f -d .../sources -t . базовая установка find -samefile .exclude -exec rm {} +