Então, estou escrevendo um pequeno gerenciador de pacotes, e um problema que encontrei é fazer links simbólicos para arquivos.
Ele instala o pacote em /usr/pkg/name-version
e depois lê um arquivo para determinar quais links simbólicos criar. Estou usando ln
para fazer os links, e me deparei com um problema ao tentar instalar os headers da API do Linux. Preciso vincular os próprios arquivos de cabeçalho, não as pastas que os contêm (portanto, se 2 pacotes precisarem colocar arquivos no mesmo subdiretório de inclusão, eles poderão fazê-lo sem estragar um pacote).
Esse problema eu resolvi, mas ln
simplesmente ocorre um erro se o caminho estiver incompleto, o que é irritante porque esses diretórios não deveriam existir até que o pacote fosse instalado.
Existe um sinalizador para ln
criar algum diretório que esteja faltando ou terei que usar algum script bash complicado?
Responder1
Não há sinalizador para fazer isso ln
. Criar diretórios não é seu trabalho.
mkdir -p foo/bar/qux
criará foo
e foo/bar
conforme foo/bar/qux
necessário. Portanto, chame mkdir -p
primeiro todos, exceto o último componente do caminho.
Parece que você está reinventando a roda Arrumar, um gerenciador de pacotes simples que mescla hierarquias de diretórios criando diretórios na profundidade necessária com links simbólicos para componentes de diferentes pacotes internos. Ou talvezXStow, que é como o Stow, mas com mais possibilidades de personalização.
Responder2
Você não precisará de um script bash complicado, mas de uma linha simples. mkdir --parents
cuidará de tudo, sem sequer imprimir um erro se a estrutura de diretórios já existir.
Apenas tome cuidado com a forma como você trata esses diretórios na remoção, para não quebrar outros pacotes.
Além disso, como você está escrevendo em bash
, você pode dar uma olhada emfeitiçaria(plugue sem vergonha). Talvez fosse mais simples apenas modificar isso, pois é maduro e flexível.
Responder3
Talvez tar
pudesse ajudar a preparar o arquivo com os links:
find . -type l > links.txt
tar cpf links.tar --files-from links.txt
E então para criar os links quando necessário:
tar xvf links.tar