Use 'ln' para criar um diretório ausente

9

Então, estou escrevendo um gerenciador de pacotes pequeno e um problema que enfrentei é criar links simbólicos para arquivos.

Ele instala o pacote em /usr/pkg/name-version e, em seguida, lê um arquivo para determinar quais links simbólicos devem ser criados. Estou usando ln para fazer os links e me deparei com um problema ao tentar instalar os cabeçalhos da API do Linux. Eu preciso vincular os próprios arquivos de cabeçalho, não as pastas que os contêm (portanto, se dois pacotes precisarem colocar arquivos no mesmo subdiretório de inclusão, eles podem sem enroscar um pacote).

Esse problema eu resolvi, mas ln simplesmente comete erros se o caminho estiver incompleto, o que é irritante porque esses diretórios não deveriam existir até que o pacote seja instalado.

Existe um sinalizador para ln que criará quaisquer diretórios que estão faltando, ou eu terei que ir com algum script bash complicado?

    
por Chris 04.07.2012 / 16:09

3 respostas

3

Você não precisará de um script complicado, mas de um simples liner. mkdir --parents cuidará de tudo, sem nem mesmo imprimir um erro se a estrutura de diretórios já existir.

Apenas tenha cuidado com o modo como você trata esses diretórios na remoção, para não quebrar outros pacotes.

Além disso, como você está escrevendo em bash , pode dar uma olhada em feitiçaria (plug sem vergonha). Talvez seja mais simples modificar isso, já que é maduro e flexível.

    
por 04.07.2012 / 17:19
4

Não há sinalizador para fazer isso com ln . Criar diretórios não é seu trabalho.

mkdir -p foo/bar/qux criará foo , foo/bar e foo/bar/qux conforme necessário. Portanto, chame mkdir -p em todos, exceto no último componente de caminho primeiro.

Parece que você está reinventando a roda Stow , um gerenciador de pacotes simples que mescla hierarquias de diretório criando diretórios para a profundidade necessária com links simbólicos para componentes de diferentes pacotes dentro. Ou talvez o XStow , que é como o Stow, mas com mais possibilidades de personalização.

    
por 05.07.2012 / 01:59
0

Talvez tar possa ajudar a preparar o arquivo com os links:

find . -type l > links.txt
tar cpf links.tar --files-from links.txt

E, em seguida, para criar os links onde for necessário:

tar xvf links.tar
    
por 30.10.2015 / 09:58