2015-06-04 3 views
1

Я запускаю скрипт, который просматривает все файлы в каталоге и его подкаталогах.Самый быстрый способ подсчета количества файлов в каталоге (включая подкаталоги)

Сценарий работает в течение дня, и я хотел бы оценить, как долго он будет работать. Я знаю, сколько файлов было обработано до сих пор (73 000 000), но я не знаю общее количество файлов.

Каков самый быстрый способ подсчета файлов?

Я попытался щелкнуть правой кнопкой мыши по каталогу и выбрать «свойства», и он медленно подсчитывает. Я попытался перенаправить ls в файл, и это просто сбивает & churning ...

Должен ли я писать программу в c?

+0

Возможный дубликат файла [Fast Linux File Count для большого количества файлов] (https://stackoverflow.com/questions/1427032/fast-linux-file-count-for-a-large-number-of-files) –

ответ

1

Я сделал быстрое исследование. Использование каталога с 100000 файлами я сравнил следующие команды:

ls -R <dir> 
ls -lR <dir> 
find <dir> -type f 

Я побежал их дважды, один раз перенаправления в файл (>file), и один раз трубопроводов в туалет (|wc -l). Вот раз пробег в секундах:

 >file |wc 
ls -R  14  14 
find  89  56 
ls -lR 91  82 

Разница между >file и |wc -l меньше, чем разница между ls и find.

Похоже, что ls -R составляет не менее 4x быстрее, чем find.

2

Самый простой способ:

find <dir> -type f | wc -l 

Чуть быстрее, возможно:

find <dir> -type f -printf '\n' | wc -l 
+0

Вы думаете, что поиск будет быстрее, чем ls? –

+0

Это будет быстрее, чем сохранение вывода 'ls' в файл. Он будет наравне с 'ls -R | wc -l'. –

1

Fastest Я знаю о:

ls | wc -l 

Примечание: имейте в виду, что хотя он перечисляет все узлов внутри каталога, включая подкаталоги и два r ссылки на текущий и родительский каталог (. & ..).

Если вам нужно рекурсивный подсчет файлов во всех подкаталогах (в отличие от всего, включая подкаталоги внутри текущего каталога), то вы можете добавить «рекурсивный» флаг в ls команды:

ls -R | wc -l 

Если сравнить это по скорости с предложением, используя find, вы увидите, что он намного быстрее (коэффициент от 2 до 10), но имейте в виду примечание выше.

+0

Это пропускает файлы в подкаталогах. –

+0

@RSamuelKlatchko Да, просто добавил этот вариант как альтернативу seconf. Вопрос OPs немного расплывчатый об этом ... – arkascha

+0

Я пробовал ls -R, и я перенаправляю его в файл вместо того, чтобы прокладывать в wc, чтобы я мог видеть, как далеко он добрался. Он все еще работает. Поэтому мне было интересно, есть ли быстрый способ. –

Смежные вопросы