Ambos são um wrapper para a mesma função fundamental que é uma chamada de sistema unlink()
.
Para ponderar as diferenças entre os utilitários do usuário.
rm(1)
:
- Mais opções.
- Mais feedback.
- Verificação de sanidade.
- Um pouco mais lento para chamadas individuais como resultado do acima.
- Pode ser chamado com vários argumentos ao mesmo tempo.
unlink(1)
:
- Menos verificação de sanidade.
- Não é possível excluir diretórios.
- Incapaz de reciclar.
- Só pode aceitar um argumento de cada vez.
- Marginalmente mais enxuta para chamadas individuais devido à sua simplicidade.
- Mais lento quando comparado com a exibição de
rm(1)
de vários argumentos.
Você pode demonstrar a diferença com:
$ touch $(seq 1 100)
$ unlink $(seq 1 100)
unlink: extra operand '2'
$ touch $(seq 1 100)
$ time rm $(seq 1 100)
real 0m0.048s
user 0m0.004s
sys 0m0.008s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do rm $i; done
real 0m0.207s
user 0m0.044s
sys 0m0.112s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do unlink $i; done
real 0m0.167s
user 0m0.048s
sys 0m0.120s
Se, no entanto, estivermos falando de uma chamada não adulterada para a função unlink(2)
do sistema, o que agora percebo provavelmente não é o que você está contando.
Você pode executar um sistema unlink()
em diretórios e arquivos. Mas se o diretório for pai de outros diretórios e arquivos, o link para esse pai será removido, mas os filhos ficarão pendurados. Qual é menos que ideal.
Editar:
Desculpe, esclarecemos a diferença entre unlink(1)
e unlink(2)
. Semântica ainda vai diferir entre plataforma.