Como criar pastas simbólicas e excluir certos arquivos

3

Eu não sou um guru de servidores (infelizmente) mas tenho um conhecimento decente de linux & bsd. Estou tentando ligar várias instâncias do HLDS (servidor de jogo), mas preciso excluir determinadas pastas & arquivos de configuração para conseguir isso corretamente. Eu preciso fazer isso assim como o HLDS carrega muitos mods automaticamente, e colocar uma exceção para desabilitar os mods não funciona para todos eles.

então basicamente eu quero:

/ home / user / hlds-install (a instalação base)
/ home / user / server1
/ home / user / server2
etc ...

e, em seguida, ser capaz de colocar manualmente quaisquer configs / mods ive excluídos no diretório do servidor para que cada servidor possa ser configurado individualmente.

Alguém pode me dizer como fazer isso, talvez algum tipo de script bash para que eu possa apenas mudar os alvos para executá-lo cada vez que eu quiser criar um novo. Eu tenho um bom número para fazê-lo, fazer a coisa toda manualmente para cada um definitivamente não é uma opção e estou tudo para trabalhar de forma mais inteligente, não mais difícil!

Obrigado :)

    
por Jarrod White 30.07.2010 / 04:07

2 respostas

3

Eu suponho que você realmente quer dizer "link simbólico de tudo dentro da pasta" ...

Conceitualmente, você quer algo como:

for each file in base folder not in exclude list
    create symlink in target folder pointing back to base folder
done

bash logic para conseguir isso é algo como

#! /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

Supondo que você ainda não saiba, o Guia de script de script avançado deve lhe dar o suficiente para descobrir o que globbing você quer (talvez find ) e como converter isso para uma função (talvez uma recursiva).

    
por 30.07.2010 / 04:27
1

Você pode (ab) usar xstow . Este programa é projetado para preencher uma floresta de links simbólicos, que é próxima do que você deseja. Não tem uma opção para excluir alguns arquivos, mas você pode cortá-lo, mais ou menos. Para cada servidor:

  1. Crie arquivos que você deseja excluir deste servidor. O conteúdo não importa, eles só têm que ser fáceis de dizer depois, então vamos torná-los todos os links para um arquivo em particular.
  2. (Você não menciona isso em seus requisitos, mas é fácil de ajustar.) Arquivos Symlink que devem ter um conteúdo específico do servidor de uma hierarquia que contenha apenas esses arquivos.
  3. Arquivos Symlink da instalação básica. Ignore qualquer arquivo que já esteja presente.
  4. Remova os arquivos que, de fato, desejamos excluir deste servidor.
cd .../targets/server1
touch .exclude
for x in files to exclude; 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 {} +
    
por 30.07.2010 / 20:48