У меня есть каталог с около 100 000 файлов в нем. ls -f зависает больше минуты. Я запустил strace и сразу начал встречаться с гетентами, поэтому ls четко читает каталог. Я также вижу много обращений к brk, поэтому ls явно буферизует вещи в памяти. Я написал простую программу, которая вызывает readdir и выводит имена файлов, и она отвечает немедленно. Но ls -f не обеспечивает вывод. Что дает? Я думал, что весь смысл -f в том, что он заставляет ls делать только чтение. Существует ли переносимый надежный способ составления списка содержимого каталога? (Обратите внимание, это ls из coreutils gnu в Linux.)
-РЕДАКТИРОВАТЬ-
Был псевдоним, но «/ bin / ls -1f> / dev / null» занимает от 8 до 15 секунд, «/ bin / ls -1fx> / dev / null» - от 4 до 11 секунд, но простая программа Это только делает readdir занимает 0,011 секунды. Что мне нужно сделать, чтобы GNU не сосать?
В coreutils 7.0 была добавлена оптимизация (коммит 8d974b00fbbc2025de63e1e6d54827648fefa1c4):
Первое, что приходит на ум, это то, что вы используете старую версию coreutils. Вам нужно обновить.
источник