[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: OpenVZ, VServer и полудесяток



On 23-Dec-2007, Alexey Pechnikov wrote:

> > > P.S. Утилита rm отвратительно работают с большим числом файлов в
> > > директории. Я пишу свои скрипты на tcl, которые выполняют то же самое на
> > > несколько порядков быстрее. В то же время ls работает нормально, не знаю,
> > > в чем проблема. > >
> > Кстати да, искал альтернативу rm/ls/mv, неужели лучше писать самому в
> > скриптах ?
> сложностей не составило. Если вы системные скрипты пишете на bash, то я вам 
> просто сочувствую. На bash я делаю только скрипты для /etc/init.d/ Временами 
> в рассылке пробегают темы о различных извращениях для ценителей bash, но это, 
> видно, не для меня, читаю (интересно же) с ужасом :-)
Для init.d bash как раз не рекомендуются, есть специальные шеллы с минимизацией
количества форков при загрузке..
Насчет сочувствия - сочувствую тем кто не читает вообще никакие доки,
даже howto и faq, не умеет пользоваться гуглом и думает что в этом
виноват bash.
Эта проблема есть вообще _везде_ - ограничение на длину команды(без которого было
бы всё _намного_ хуже), ядро эти "*" не понимает, bash заменяет такие
маски на полный список соотв. файлов, длина команды получается адской.
Решение:
find /test/test_10000/ -type f |xargs rm
Немного более кошерно:
find /test/test_10000/ -type f -print0 |xargs -0 rm -f
Вообще это может и сам find:
find /test/test_10000/ -type f -delete
Но xargs более универсальная вещь.
Глубина рекурсии для поиска по умолчанию не ограничена, чтобы не трогать
подкаталоги:
find /test/test_10000/ -type f -maxdepth=1 |xargs rm


Насчет вашего варианта на тикле - он хуже(съест дофига ram, если файлов много),
и явно медленнее решения с find.
и, кстати, на bash, вы могли бы написать аналогично:
cd /test/test_000000/
for f in $(ls )
do
    rm "$f"
done
Если не хочеться менять каталог - добавьте путь в ls и rm или
используйте файл:
for f in $(find /test/test_000/ -type f); do rm "$f"; done

Но это очень не эффективно - по форку на файл.


Reply to: