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
) .