Разве unlink немного быстрее чем rm?
Оба являются оберткой для одной и той же фундаментальной функции, которая является системным вызовом unlink()
.
Чтобы взвесить различия между пользовательскими утилитами.
rm(1)
unlink(1)
rm(1)
нескольких аргументов.Вы можете продемонстрировать разницу с:
_$ 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
_
Однако, если мы говорим о незапятнанном вызове системной функции unlink(2)
, который я теперь понимаю, вероятно, не то, что вы учитываете.
Вы можете выполнить системную unlink()
как для каталогов, так и для файлов. Но если каталог является родительским для других каталогов и файлов, то ссылка на этого родительского элемента будет удалена, но дочерние элементы останутся висящими. Что меньше, чем идеал.
Edit:
Извините, уточнил разницу между unlink(1)
и unlink(2)
. Семантика все еще будет отличаться между платформами.
Медленная часть удаления связана с кодом файловой системы и дисками, а не с подготовкой пользовательского пространства системным вызовом unlink ().
Т.е.: если разница в скорости имеет значение, то вам не следует хранить данные в файловой системе.
unlink это просто rm "light". У rm больше возможностей, но они делают то же самое.