Как мне заставить ls напечатать вывод, как он идет?

Похоже, что в большинстве случаев ls будет читать весь каталог перед тем, как производить какие-либо выходные данные - обычно потому, что ему нужно отсортировать или колонировать выходные данные. Обычно это нормально, но при чтении очень большого каталога с медленного сетевого сервера это фактически приводит к зависанию ls.

Есть ли способ заставить ls выводить частичный вывод по мере его продвижения? Я попробовал следующее на Mac OS X 10.6.8, но они не работают:

  • ls -lf
  • ls -1f

На всякий случай, что я хочу, не понятно, следующий скрипт Perl делает примерно правильную вещь:

opendir(DIR, ".") or die "can't opendir $dir: $!";
while($filename = readdir DIR) {
    print $filename, "\n";
}
closedir DIR;

... только я хотел бы иметь возможность использовать -l, -lOи не надо писать самому!

2 ответа

Вы пытались найти?

Пытаться

find . -ls

Вы на правильном пути с -f опция, которая предотвращает сортировку вывода, но страница руководства отмечает, что с -l,

Если вывод на терминал, общая сумма для всех размеров файла выводится в строке перед длинным списком.

Возможно, вы сможете предотвратить это суммирование (что потребует statсначала все файлы в каталоге), отправив вывод в cat, чтобы предотвратить вывод на терминал.

Я не знаю почему -1f форма не работает для вас; мне кажется, что он отлично работает на GNU ls. Еще одна особенность GNU ls (которая может не относиться к вам) заключается в том, что -lf такой же как -f, но -fl это сочетание -f а также -l (длинный, несортированный список). Попробуйте изменить порядок некоторых из ваших флагов, чтобы убедиться, что это не проблема для вас.

Другие вопросы по тегам