Soluzione 1:
Entrambi sono un wrapper per la stessa funzione fondamentale che è un unlink()
chiamata di sistema.
Soppesare le differenze tra le utilità di userland.
rm(1)
:
- Altre opzioni.
- Altri feedback.
- Controllo di integrità.
- Un po' più lento per le singole chiamate come risultato di quanto sopra.
- Può essere chiamato con più argomenti contemporaneamente.
unlink(1)
:
- Meno controlli di integrità.
- Impossibile eliminare le directory.
- Impossibile ricorrere.
- Può prendere solo un argomento alla volta.
- Leggermente più snello per chiamate singole grazie alla sua semplicità.
- Più lento rispetto a dare
rm(1)
più argomenti.
Potresti dimostrare la differenza con:
$ 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 invece stiamo parlando di una chiamata genuina al sistema unlink(2)
function, che ora mi rendo conto che probabilmente non è quello che stai tenendo in considerazione.
Puoi eseguire un unlink()
di sistema su directory e file allo stesso modo. Ma se la directory è un genitore di altre directory e file, il collegamento a quel genitore verrebbe rimosso, ma i figli rimarrebbero penzolanti. Il che è tutt'altro che ideale.
Modifica:
Spiacenti, chiarita la differenza tra unlink(1)
e unlink(2)
. La semantica sarà ancora diversa a seconda della piattaforma.
Soluzione 2:
A livello di specifica POSIX, ciò che fa rm è specificato in modo molto più preciso rispetto a ciò che fa unlink.
La portabilità del risultato sembra probabilmente essere migliore utilizzando rm, se il tuo script deve essere eseguito su tutti i sistemi operativi.
Soluzione 3:
La parte lenta della rimozione è il codice del filesystem e le cose del disco, non la preparazione dello spazio utente della chiamata di sistema unlink().
Vale a dire:se la differenza di velocità è importante, non dovresti archiviare i dati nel file system.
unlink è solo una "luce" di rm. rm ha più funzionalità ma fanno la stessa cosa.