Назад | Перейти на главную страницу

Как создать символическую ссылку на папки и исключить определенные файлы

Я не гуру серверов (к сожалению), но хорошо разбираюсь в 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. Эта программа предназначена для заполнения леса символических ссылок, который близок к тому, что вы хотите. У него нет возможности исключить некоторые файлы, но вы можете его взломать. Для каждого сервера:

  1. Создавайте файлы, которые хотите исключить с этого сервера. Содержимое не имеет значения, его просто нужно легко определить впоследствии, поэтому мы сделаем их все жесткими ссылками на один конкретный файл.
  2. (Вы не упоминаете об этом в своих требованиях, но их легко вписать.) Файлы символических ссылок, которые должны иметь специфичное для сервера содержимое из иерархии, содержащей только эти файлы.
  3. Файлы символической ссылки из базовой установки. Пропустите любой файл, который уже есть.
  4. Удалите файлы, которые мы действительно хотели исключить с этого сервера.
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 {} +