Рекурсивно підраховувати всі файли в каталозі [дублікат]


198

Можливий повтор:
Як я можу підрахувати кількість папок на диску, використовуючи Linux?

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

Наприклад, з огляду на це дерево каталогів:

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

Якщо я ввійду /home, я хотів би, щоб він повернув чотири файли. Або бонусні бали, якщо він повертає чотири файли та два каталоги. В основному, я хочу еквівалент клацання правою кнопкою миші на папці в Windows та вибору властивостей і бачити, скільки файлів / папок міститься в цій папці.

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


Не зовсім те, що ви шукаєте, але щоб отримати дуже швидкий загальний підсумок, якщо ваша locateбаза даних оновлена: locate /some/path | wc -l(або на моєму Mac:) locate -c /some/path. Але: це також буде рахувати файли в /this/other/path/with/some/path, і буде рахувати самі папки.
Ар'ян

До речі, це інша, але тісно пов’язана проблема (підрахунок усіх каталогів на диску) та рішення: superuser.com/questions/129088/…
Аманда,

Відповіді:


340

find . -type f | wc -l

Пояснення:
find . -type fзнаходить усі файли ( -типу f ) у цьому каталозі ( . ) Та у всіх підкаталогах, імена файлів потім друкуються для стандартного виведення по одному на рядок.

Потім це трубопровід | у wc(count word) -lпараметр вказує wc лише підраховувати рядки його введення.

Разом вони рахують усі ваші файли.


1
Це не стосується помилки "за одним" через останній новий рядок з findрезультату
RobertDeRose


1
Коли файлів не знайдено, результат1
Ділантепігуй

47

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

find . | wc -l

пошук йде набагато швидше, майже миттєво, або, принаймні, це робить для мене. Це пояснюється тим, що в клавіші типу потрібно запускати системний виклик stat () для кожного імені, щоб перевірити його тип - опускаючи це, уникає цього робити.

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


1
Коли файлів не знайдено, результат1
Ділантепігуй

25

Для файлів:

find -type f | wc -l

Для каталогів:

find -mindepth 1 -type d | wc -l

Вони обидва працюють у поточному робочому каталозі.


1
Коли файлів не знайдено, результат1
Ділантепігуй

8

З баш 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"

Якщо ви хочете шукати файли та каталоги, вам не потрібно дзвонити


8

Трохи оновіть прийняту відповідь, якщо ви хочете порахувати кількість панів та іншого

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn

1
На Mac / BSD : find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn(Тут введіть %Tпорожнє для звичайного файлу, зірочку для виконуваного файлу або нахил для папки; отже %HT, потрібен або якийсь додатковий текст, щоб уникнути прорахування місця, наприклад > %T. )
Ар'ян

Дає мені "знайти: незаконний варіант - e" в моїй 10.13.6 mac
K.-Michael Aye
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.