Beri bash i ebash / Говнокод #3164 Ссылка на оригинал

0

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

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

Запостил: 13thslayer 13thslayer, (Updated )

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

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

    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 начинает печатать результаты мнгновенно.
      Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8