Crie um link simbólico - sobrescreva se existir um

36

Eu quero pegar os dados em /path/to/data/folder/month/date/hour/minute/file e fazer um link simbólico para /path/to/recent/file e fazer isso automaticamente toda vez que um arquivo for criado.

Assumindo que não saberei de antemão se existe /path/to/recent/file , como posso criá-lo (se não existir) ou substituí-lo (se existir)? Tenho certeza que posso apenas verificar se existe e então fazer um link, delete, mas eu estou querendo saber se existe um comando simples que fará o que eu quero em um passo.

    
por drjrm3 03.06.2015 / 14:48

2 respostas

51

Este é o objetivo da opção ln -f : ela remove os arquivos de destino existentes, se houver, antes de criar o link.

ln -sf /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

criará o link simbólico /path/to/recent/file apontando para /path/to/data/folder/month/date/hour/minute/file , substituindo qualquer arquivo existente ou link simbólico para um arquivo, se necessário (e funcionando bem se já não existir nada).

Se um diretório, ou um link simbólico para um diretório, já existir com o nome do alvo, o link simbólico será criado dentro dele (assim você vai acabar com /path/to/recent/file/file no exemplo acima). A opção -n , disponível em algumas versões do ln , cuidará dos links simbólicos para os diretórios, substituindo-os conforme necessário:

ln -sfn /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

POSIX ln não especifica -n , então você não pode confiar em geral. Muito do comportamento de ln é definido pela implementação, por isso você realmente precisa verificar os detalhes do sistema que está usando. Se você estiver usando GNU ln , você pode usar o -t e -T opções também, para tornar seu comportamento totalmente previsível na presença de diretórios ( ie falha ao invés de criar o link dentro do diretório existente com o mesmo nome).

    
por 03.06.2015 / 14:57
29

Por favor, leia o manual .

ln -sfn /new/target /path/to/symlink

$ man ln

-n, --no-dereference
treat LINK_NAME as a normal file if it is a symbolic link to a directory

    
por 20.12.2016 / 17:04

Tags