Как мне заставить 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 ответа
Вы на правильном пути с -f
опция, которая предотвращает сортировку вывода, но страница руководства отмечает, что с -l
,
Если вывод на терминал, общая сумма для всех размеров файла выводится в строке перед длинным списком.
Возможно, вы сможете предотвратить это суммирование (что потребует stat
сначала все файлы в каталоге), отправив вывод в cat
, чтобы предотвратить вывод на терминал.
Я не знаю почему -1f
форма не работает для вас; мне кажется, что он отлично работает на GNU ls. Еще одна особенность GNU ls (которая может не относиться к вам) заключается в том, что -lf
такой же как -f
, но -fl
это сочетание -f
а также -l
(длинный, несортированный список). Попробуйте изменить порядок некоторых из ваших флагов, чтобы убедиться, что это не проблема для вас.