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

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

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