Рекурсивно подсчитайте все файлы в каталоге [дубликат]

Возможные Дубликаты:

как я могу подсчитать количество папок на диске в Linux?

у меня есть очень глубокое дерево каталогов на мою Linux. Я хотел бы подсчитать все файлы в этом пути, включая все подкаталоги.

например, для данного дерева каталогов:

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/

если я сдам /home, Я хотел бы, чтобы он вернул четыре файла. Или бонусные баллы, если он возвращает четыре файла и два каталога. В принципе, мне нужен эквивалент щелчка правой кнопкой мыши по папке в Windows и выбора свойств и просмотра количества файлов/папок, содержащихся в этой папке.

как я могу это сделать наиболее легко? У меня есть решение, включающее сценарий Python, который я написал, но почему это не так просто, как запуск ls | wc или похожие?

170
задан Community 2010-10-13 01:41:12
источник

5 ответов

find . -type f | wc -l

объяснение:

find . -type f находит все файлы ( -type f ) в ( . ) каталог и во всех подкаталогах имена файлов затем печатаются по одному в строке.

это передается / на wc (количество слов) в -l опция говорит wc только количество строк его ввода.

вместе они считают все ваши файлы.

293
отвечен Nifle 2010-10-13 04:23:29
источник

ответы выше уже отвечают на вопрос, но я добавлю, что если вы используете find без аргументов (за исключением папки, в которой вы хотите, чтобы поиск происходил), как в:

find . | wc -l

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

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

45
отвечен Francisco Vieira 2012-07-18 02:53:54
источник

файлы:

find -type f | wc -l

для каталогов:

find -mindepth 1 -type d | wc -l

Они оба работают в текущем рабочем каталоге.

25
отвечен cYrus 2010-10-13 01:56:03
источник

С bash 4+

shopt -s globstar
for file in **/*
do
  if [ -d "$file" ];then
    ((d++))
  elif [ -f "$file" ];then
     ((f++))
  fi
done
echo "number of files: $f"
echo "number of dirs: $d"

нет необходимости вызывать find дважды, если вы хотите искать файлы и каталоги

8
отвечен user31894 2010-10-13 05:58:12
источник

небольшое обновление принятого ответа, если вы хотите подсчитать dirs и такие

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn
7
отвечен Rich Homolka 2010-10-13 18:26:17
источник

Другие вопрос linux command-line