Cria automaticamente links simbólicos de links entre diretórios, criando um diretório uber

1

Eu tenho um diretório, folder1 , que compartilhei via samba. Eu tenho outro diretório, folder2 , que não é compartilhado, mas contém muitas subpastas que eu quero compartilhar. Quando um usuário se conecta ao meu compartilhamento folder1 , eu gostaria que eles também vissem os subdiretórios de folder2 .

Atualmente, a maneira como eu faço isso é abrir folder2 no gnome, clicar com o botão direito do mouse nos diretórios e selecionar Make Links . Então eu pego os links simbólicos e os recorto e colo manualmente em folder1 .

Eu gostaria de tê-lo para que, quando eu criar um novo diretório em folder2 , um link simbólico para ele seja criado dentro de folder1 . Como devo fazer isso? Estou usando o Ubuntu 14.04

    
por Jason B. 28.10.2014 / 15:32

1 resposta

1

Pode haver maneiras automáticas de fazer isso, mas escrever alguns scripts de shell é provavelmente a maneira mais fácil de resolver isso.

Primeiro, em vez de apenas criar um novo subdiretório na pasta2, faça isso com um script que também crie o link simbólico ao mesmo tempo. O seguinte script não testado fará isso quando você preencher os caminhos reais para seus diretórios. O script principal é realmente simples, mas adicionei alguns erros no processamento para que ele tivesse uma chance no mundo real.

#!/bin/bash
## create subdirectory and symbolic link
## Usage: script-name <name of new subdirectory to create and link>

PRIVATE="path to private directory" ## Put real path here
SHARED="path to shared directory" ## Put real path here
cd "${PRIVATE}"
if [ -z "" ]
then
  echo "Aborting - no new directory name specified"
  exit 1
fi

if [ -e "" ]
then
  echo "Aborting - file or directory with that name already exists"
  exit 1
fi

mkdir ""
RC=$?
if ((RC))
then
  echo "Aborting - Failed to create new private subdirectory named [] in [${PRIVATE}] with error code [${RC}]"
  exit ${RC}
fi

cd "${SHARED}"
ln -s "${PRIVATE}/" .
RC=$?
if ((RC))
then
  echo "Aborting - Failed to create new symlink named [] in [${SHARED}] with error code [${RC}]"
  exit ${RC}
fi

exit 0

Outras preocupações:

Se você precisar acessar isso a partir de um gui em vez da linha de comando, basta adicionar um pequeno código que chame yad para criar uma caixa de diálogo para solicitar o nome do diretório a ser criado e criar uma entrada para seu script. seu sistema de menus e, opcionalmente, em sua área de trabalho ou painel. Fazer isso é simples, mas está além do escopo desta questão.

Da mesma forma, se alguma outra coisa criar os novos subdiretórios na pasta1, você poderá escrever um script que procure por novos subdiretórios na pasta1 e, em seguida, faça um link para a pasta2.

Você pode executá-lo manualmente ou executá-lo em um loop em que ele faz seu trabalho, dorme por algum tempo e, em seguida, é executado novamente.

Este script "daemon" pode ser iniciado manualmente ou executado a partir do seu script .login para que ele seja iniciado sempre que você fizer login. Ele também pode ser iniciado a partir do cron se você se certificar de que quaisquer subdiretórios e links criados tenham o proprietário, o grupo e as permissões desejadas. (Você provavelmente não quer que eles sejam de propriedade do root, no qual o cron do usuário é executado).

Tudo depende das suas necessidades exatas.

Se a pasta1 ou a pasta2 precisarem de privilégios elevados para a escrita, o script precisará ser executado com essas permissões ou ter um sudo ou dois para lidar com isso e, possivelmente, uma entrada em sudoers, para não precisar Peça sua senha toda vez. Em seguida, o próprio script teria que ter um proprietário seguro e permissões restritas e ser mantido em um diretório que também requer privilégios elevados para gravação - por motivos de segurança.

Você também pode precisar considerar o caso quando os subdiretórios são excluídos da pasta1. Então, você provavelmente desejará excluir os links simbólicos quebrados da pasta2. A abordagem / código seria muito semelhante ao acima.

    
por Joe 30.10.2014 / 03:36