Uma abordagem sem raça com o GNU ln fornecido file1 não é do tipo diretório :
ln -PT file1 file2 && rm file1
(Exceto para erros em alguns sistemas de arquivos de rede), isso garante que nenhum arquivo file2 será substituído (ou que se file2 for do tipo diretório, file1 não será movido para ele), porque o A chamada do sistema link() , ao contrário da chamada do sistema rename() , falhará se o destino existir.
No entanto, haverá um estado intermediário em que o arquivo existe como file1 e file2 .
A opção -T (para sempre fazer um link("file1", "file2") mesmo se file2 for do tipo diretório) é específica do GNU.
Você também pode usar o comando link :
link file1 file2 && rm file1
No entanto, se file1 for um symlink, dependendo da implementação, file2 será um link físico para esse link simbólico ou para o destino desse link simbólico (no Solaris, use /usr/sbin/link , não /usr/xpg4/bin/link ) .