понедельник, 23 мая 2011 г.

Вывод списка директорий

Многие сразу назовут
find . -type d -depth 1
Но в небольшой папке на 100 гиг и всего 150 директориями вывод занял почти 2 минуты. Делается слишком много лишней работы.

Более быстрые варианты:
ls -1F | grep "/"
ls -lA | grep "^d" | awk '{print $9}'

Но будет показывать в том числе директории с точкой в начале. Если не надо - нужно доработать grep-правило.

И всё-таки мне непонятно, если поиску сказано проверять только на 1 уровень, какого он лезет глубже..

2 комментария:

  1. Тут - что ни делай - всё равно придётся для каждой записи в каталоге делать stat(). Похоже, старый совет не разводить огромных каталогов, а делать дерево файлов поглубже - всё ещё актуален.

    ОтветитьУдалить
  2. Я чуть про другое...
    ls -1|wc -l
    154

    И занимает это доли секунды. С какого перепугу find делает тоже самое пару минут - вопрос.
    Другое дело, что если в каталоге больше 100к файлов - очистить его можно только через find . -exec rm {} \; - просто rm не может пережевать такой большой список аргументов.

    ОтветитьУдалить