1. bash / Говнокод #3164

    −135

    1. 1
    find $PWD -maxdepth 0 2>/dev/null

    Вместо "ls"...

    Запостил: 13thslayer, 06 Мая 2010

    Комментарии (4) RSS

    • В таком виде не работает - выводит текущую директорию.
      Так: find $PWD -maxdepth 1 2>/dev/null работает, но не вижу принципиального отличия от "find $PWD -maxdepth 1".
      Ответить
      • Ошибки типо "Permission denied" уходят. Еще можно добавить "-exec basename {}", тогда вообще тоже самое :D
        Ответить
    • не говно.

      ls помимо чтения списка файлов делает еще две вещи: stat() на каждый элемент каталога и сортировка имен. find ни первого ни второго не делает.

      представте разницу в производительность если читается каталог с >10K файлов. find выдаст результат мнгновенно (opendir()/readdir() x N/closedir()) а ls будет Н минут тормозить (opendir()/{ readdir(); stat(); } x N/closedir(); qsort()).

      и даже qsort() тоже может подтормаживать если имена очень длиные, что весьма вероятно на каталогах с большим количеством файлов. при среднем 100 символов в имени + 10К файлов == ~1МБ памяти. оно относительно быстро, но просто излишне в некоторых ситуациях.
      Ответить
      • а ну да. "-maxdepth 0" это может быть говно. я пользуюсь "-maxdepth 1" для ClearCase dynamic views где revision history представлена как файловая система. там все через Ж тормозит, ls на каталоге с 15К элементами (например версия файла с большим количеством тагов/лейблов) занимает около 5 минут - find начинает печатать результаты мнгновенно.
        Ответить

    Добавить комментарий