LINUX.ORG.RU

find xargs rm


2

0

Привет.

Как будет быстрее?

Так? find /path -type f | xargs -L 1000 rm
Или так? find /path -type f -delete

В каталоге очень_много_файлов, целый день уже удаляются.

Спасибо.

find /path -type f -exec rm {} \;

можно запустить несколько процессов

annoynimous ★★★★★
()

мне кажется будет быстрее сделать cd /каталог && ls | xargs rm я так всегда делаю.

Komintern ★★★★★
()

find /path -type f -delete быстрее всех по идее, 1 процесс, нет никаких служебных расходов. Но, полагаю, тормоза в твоём случае исключительно из за disk IO и от них ты не избавишься.

Legioner ★★★★★
()

Цитируем Frakhtan-teh

find /path -type f -delete

Так быстрее, так как нет лишних форков.

sdio ★★★★★
()

Цитируем Frakhtan-teh

В каталоге очень_много_файлов, целый день уже удаляются.

Для таких каталогов стоит монтировать отдельную ФС, тогда просто mkfs и все очищается за секунду

sdio ★★★★★
()

Да, и ещё, замечал что на xfs удаляется примерно раз в 10 быстрее чем на ext3, даже использовал её специально для хранения больших проектов. ext4 не мерял - не было тогда.

gena2x ★★★
()
Ответ на: комментарий от gena2x

rm -rf <имя каталога>

argument list too long или чето подобное. тут именно через xargs нужно. find - сущность всяко лишняя, ls быстрее.

Komintern ★★★★★
()
Ответ на: комментарий от Komintern

Может, замер устроить? По идее с рейзера должны тереться мелкие файлы лучше.

mclaudt
()

всё, что идет через -exec или xargs выполняется медленно.
юзай -delete
а вообще можно и потестить, благо довольно просто

xydo ★★
()
Ответ на: комментарий от Komintern

xargs в данном случае - зло астрономического масштаба!

xydo ★★
()
Ответ на: комментарий от xydo

однако, как это ни удивительно, но:
[user@host ~]$ time { find test -type f -delete ; }

real   1m7.633s
user   0m0.110s
sys   0m4.187s

[user@host ~]$ time { rm -rf test3; }

real   1m16.976s
user   0m0.050s
sys   0m3.992s

[user@host test4]$ time { ls | xargs rm; }

real   0m5.625s
user   0m0.356s
sys   0m3.283s

чью подвох, кто-нибудь может еще потестить?
файлы генерил следующей командой:
for i in `seq 1 100000`; do dd if=/dev/zero bs=512 count=1 of=$i ; done

xydo ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.