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


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

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

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

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

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

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

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

10
задан Community
16.05.2023 12:25 Количество просмотров материала 3660
Распечатать страницу

5 ответов

find . -type f | wc -l

объяснение:

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

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

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

293
отвечен Nifle 2023-05-17 20:13

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

find . | wc -l

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

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

45
отвечен Francisco Vieira 2023-05-17 22:30

файлы:

find -type f | wc -l

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

find -mindepth 1 -type d | wc -l

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

25
отвечен cYrus 2023-05-18 00:47

С 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 2023-05-18 03:04

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

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn
7
отвечен Rich Homolka 2023-05-18 05:21

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх