Краткое описание: Вот несколько способов подсчитать количество файлов в каталоге в командной строке Linux.
Мы предполагаем, что вы знаете о команде wc для подсчета количества строк. Мы можем использовать ту же команду wc с командой ls для подсчета количества файлов в каталоге.
Эта задача кажется простой, но вскоре может стать немного сложной, в зависимости от ваших потребностей и определения количества файлов. Прежде чем мы вас запутаем, давайте рассмотрим различные варианты подсчета количества файлов в Linux.
Позвольте нам сначала показать вам содержимое тестового каталога, который я собираюсь использовать в этой статье:
destroyer@andreyex:~/tutorials$ ls -la total 64 drwxr-xr-x 4 destroyer destroyer 4096 Apr 29 17:53 . drwxr-xr-x 55 destroyer destroyer 4096 Apr 29 15:50 .. -rwxr–r– 1 destroyer destroyer 456 Mar 6 16:21 agatha.txt -rw-r–r– 1 destroyer destroyer 0 Apr 16 19:53 .a.t -rwxr–r– 1 destroyer destroyer 140 Mar 22 16:41 bash_script.sh -rw-rw-r– 1 destroyer destroyer 95 Feb 11 13:12 cpluplus.cpp -rw-r–r– 1 destroyer destroyer 1778 Apr 29 16:16 my_zip_folder.zip drwxr-xr-x 4 destroyer destroyer 4096 Apr 19 19:07 newdir -rw-r–r– 1 destroyer destroyer 163 Apr 13 15:07 prog.py -rw-r–r– 1 destroyer destroyer 19183 Mar 18 18:46 services -rw-r–r– 1 destroyer destroyer 356 Dec 11 21:35 sherlock.txt -rwxrw-r– 1 destroyer destroyer 72 Jan 21 15:44 sleep.sh drwxr-xr-x 3 destroyer destroyer 4096 Jan 4 20:10 target
Вы можете видеть, что у него есть 9 файлов (включая один скрытый файл) и 2 подкаталога в этом каталоге. Но вам не нужно делать это вручную. Давайте посчитаем количество файлов с помощью команд Linux.
Вы можете просто запустить комбинацию команды ls и wc, и она отобразит количество файлов:
ls | wc -l
Вывод:
destroyer@andreyex:~/tutorials$ ls | wc -l 10
Есть проблема с этой командой. Он считает все файлы и каталоги в текущих каталогах. Но он не видит скрытые файлы (файлы, имена которых начинаются с точки).
По этой причине приведенная выше команда показала мне количество файлов 10 вместо 11 (9 файлов и 2 каталога).
Вы, наверное, уже знаете, что опция -s команды ls показывает скрытые файлы. Но если вы используете команду ls -a, она также отображает. (существующий каталог) и .. (родительский каталог). Вот почему вам нужно использовать параметр -A, который отображает скрытые файлы, исключая. и .. каталоги.
ls -A | wc -l
Это даст вам правильное количество файлов и каталогов в текущем каталоге. Посмотрите на вывод, который показывает количество 11 (9 файлов и 2 каталога):
destroyer@andreyex:~/tutorials$ ls -A | wc -l 11
Вы также можете использовать эту команду для достижения того же результата:
ls -1A | wc -l
Обратите внимание, что используется опция 1 (один), а не l (L). Использование опции l (L) отображает дополнительную строку в начале вывода (см. «Всего 64» в выводе каталога в начале статьи). Использование 1 (одного) списка по одному контенту в строке, исключая дополнительную строку. Это дает более точный результат.
Пока что вы видите количество файлов и каталогов только в текущем каталоге. Он не учитывает файлы в подкаталогах.
Если вы хотите подсчитать количество файлов и каталогов во всех подкаталогах, вы можете использовать команду дерева.
tree -a
Эта команда показывает структуру каталогов, а затем выводит сводку внизу вывода.
destroyer@andreyex:~/tutorials$ tree -a . ├── agatha.txt ├── .a.t ├── bash_script.sh ├── cpluplus.cpp ├── my_zip_folder.zip ├── newdir │ ├── new_dir │ │ ├── c.xyz │ │ ├── myzip1.zip │ │ └── myzip2.zip │ └── test_dir │ ├── c.xyz │ ├── myzip1.zip │ └── myzip2.zip ├── prog.py ├── services ├── sherlock.txt ├── sleep.sh └── target ├── agatha.txt ├── file1.txt └── past ├── file1.txt ├── file2.txt └── source1 └── source2 └── file1.txt 7 directories, 19 files
Как вы можете видеть в выводе, это показывает, что всего имеется 7 каталогов и 20 файлов. Хорошая вещь об этом результате — то, что он не считает каталоги в количестве файлов.
Пока что все решения, которые мы видели для подсчета количества файлов, также учитывают каталоги. Каталоги — это, по сути, файлы, но что если вы хотите считать только количество файлов, а не каталоги? Вы можете использовать замечательную команду поиска .
Вы можете запустить эту команду:
find . -type f | wc -l
Приведенная выше команда провела поиск всех файлов (тип f) в текущем каталоге и его подкаталогах.
destroyer@andreyex:~/tutorials$ find . -type f | wc -l 20
Это круто! Но что если вы хотите посчитать количество файлов в текущем каталоге, исключая только файлы в подкаталогах? Вы можете использовать ту же команду, что и выше, но с небольшой разницей.
Все, что вам нужно сделать, это добавить «глубину» вашей находки. Если вы установите его на 1, он не будет входить в подкаталоги.
find . -maxdepth 1 -type f | wc -l
Вот вывод сейчас:
destroyer@andreyex:~/tutorials$ find . -maxdepth 1 -type f | wc -l 9
Итого
В Linux у вас может быть несколько способов достичь одной и той же цели. Мы уверены, что в Linux может быть несколько других способов подсчета количества файлов. Если вы используете какую-то другую команду, почему бы не поделиться ею с нами?
Мы надеемся, что этот учебник по Linux помог вам узнать несколько вещей. Оставайтесь на связи, чтобы узнать больше советов по Linux.