Quero anotar os dados, /path/to/data/folder/month/date/hour/minute/file
vinculá-los /path/to/recent/file
e fazer isso automaticamente sempre que um arquivo for criado.
Supondo que não saberei antecipadamente se /path/to/recent/file
existe, como posso criá-lo (se não existir) ou substituí-lo (se existir)? Tenho certeza de que posso apenas verificar se existe e, em seguida, fazer uma exclusão, link simbólico, mas estou me perguntando se existe um comando simples que faça o que eu quero em uma única etapa.
Respostas:
Por favor, leia o manual .
fonte
/path/to/symlink
já é um link simbólico para um diretório, sem a-n
bandeira, você vai ter o link simbólico criado em/path/to/symlink/target
vez de substituir/path/to/symlink
/path/to/symlink
existe e é um diretório, mas não um link simbólico. Eu acho que a única maneira de contornar isso é correrrm -rf
primeiro.Este é o propósito do
ln
's-f
opção: ele remove arquivos de destino existentes, se houver, antes de criar o link.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 link simbólico para um diretório já existir com o nome do destino, o link simbólico será criado dentro dele (para que você acabe
/path/to/recent/file/file
no exemplo acima). A-n
opção, disponível em algumas versões doln
, cuidará dos links simbólicos para os diretórios, substituindo-os conforme necessário:O POSIX
ln
não especifica,-n
portanto você não pode confiar nele em geral. Grande parte doln
comportamento é definido pela implementação, então você realmente precisa verificar as especificidades do sistema que está usando. Se você estiver usando o GNUln
, também poderá usar as opções-t
e-T
, para tornar seu comportamento totalmente previsível na presença de diretórios ( ou seja, falhar em vez de criar o link dentro do diretório existente com o mesmo nome).fonte