Intereting Posts
Использование crc32 для поиска поврежденных или поврежденных файлов Параметры выходного компилятора из SSH Не удалось обновить имя хоста для Ubuntu Server (в Digital Ocean) Вариант «пользователь» работает для монтирования, а не для umount Проверка того, что пользовательские dotfiles не являются групповыми или общедоступными Как предотвратить перекрытие рабочих столов Gnome и XFCE обработка правой кнопкой мыши с помощью одной кнопки мыши (планшета) Перенос виртуальной машины Virtualbox в физическую систему с двойной загрузкой Как перекодировать DVD в один файл? Как я могу найти фактический (dd) размер флеш-диска? Установка Lispworks на рабочую станцию ​​rhel 6.5. Ошибка при загрузке приложения Как я могу быстро просмотреть изображение с круглой рамкой? Приложение Spring Boot как услуга. System V Init Почему служба FreeRADIUS не будет работать в Centos? Переключение между dvorak и qwerty

Определение количества файлов и подкаталогов в Linux

При отображении каталогов в Linux с помощью ls -ld я получаю что-то вроде этого:

user@shell:~/somedirectory$ ls -ld drwxr-xr-x 2014 K-rock users 65536 20011-11-05 11:34 user@shell:~/somedirectory$ 

Как найти количество подкаталогов и файлов в somedirectory используя результат выше? Насколько я понимаю, количество ссылок соответствует количеству подкаталогов, но как насчет количества файлов? Как бы я прочитал результат ls -ld чтобы найти эти числа?

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

Поскольку вы хотите расшифровать полученный результат, мы попробуем и упростим все.

 ls -ld drwxr-xr-x 4 root root 4096 Nov 11 14:29 . 

Теперь ls -ld в каталоге дает мне вывод, как указано выше. Теперь число 4 – это то, на что вам нужно сосредоточиться. 4 соответствует:

  • запись для этого каталога в родительском каталоге;
  • собственный вход в каталог . ;
  • .. записи в 2 подкаталогах внутри каталога.

Чтобы проверить это, если я просто ls я мог видеть, что у меня есть еще несколько каталогов. Итак, это дает представление о том, что мы могли бы расшифровать из вывода вашего дела.

 drwxr-xr-x 2014 K-rock users 65536 20011-11-05 11:34 

Есть подкатегории 2012 года, из-за которых вы получаете результат 2014 года.

Что касается количества файлов, невозможно найти его на выходе, который у вас есть.

Чтобы проверить правильность моей теории, я сделал следующее тестирование.

 ls -la | grep -E '[d]' #Display only directories drwxr-xr-x 12 root root 4096 Nov 11 14:42 . drwxr-xr-x 4 root root 4096 Nov 11 14:20 .. drwxr-xr-x 3 root root 4096 Nov 11 14:45 hello1 drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello2 drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello3 drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello4 drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello5 drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello6 drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello7 drwxr-xr-x 2 root root 4096 Nov 11 14:42 hello8 drwxr-xr-x 2 root root 4096 Nov 11 14:21 hello-subdir drwxr-xr-x 2 root root 4096 Nov 11 14:29 spaced hello 

Теперь я ls -ld команду ls -ld и вывод, который я получаю,

 ls -ld drwxr-xr-x 12 root root 4096 Nov 11 14:42 . 

Он не учитывал файлы или подкаталоги, вложенные в подкаталоги папки. В основном, приведенная выше команда говорит, что у меня есть 10 каталогов внутри моей папки.

PS: Часто бывает плохой идеей разбирать что-то из вывода ls поскольку он не является надежным. -maxdepth этого используйте find -maxdepth если у вас есть возможность его использовать.

Если вы можете использовать ls , то я предполагаю, что вы также можете использовать встроенные функции bash .

Использование чистого bash для подсчета всех записей в текущем каталоге:

 $ num_entries () ( # Define a function to: > shopt -s nullglob # expand * to empty string if no files > shopt -s dotglob # include .files in * expansion > a=( * ) # create array containing all entries in current directory > echo ${#a[@]} # display length of array (number of directory entries) > ) $ num_entries # call function for current directory 467 $ 

Использование чистого bash для подсчета всех подкаталогов в текущем каталоге:

 $ num_dirs () ( > shopt -s nullglob > shopt -s dotglob > a=( */ ) # note the */ glob which selects only directories > echo ${#a[@]} > ) 

Я помещал их в ( ) тела функций, чтобы настройки shopt имели эффект только внутри этой функции и не имели других побочных эффектов.

В простом случае это работает:

 ls -A1 | wc -l 

Вы можете комбинировать несколько подходов

  1. Количество файлов в каталоге

     ls -l | grep "^-" | wc -l 
  2. Прогулка по подкаталогам

     find ./subdirectory -type d 
  3. сгруппированы в одну команду

      find ./subdirectory -type d | xargs -I{} sh -c "ls -l {} | grep -c '^-'" 

Будет рекурсивно приводить количество файлов, оставшихся в каталогах.

Конечно, существует несколько способов префиксации или обогащения вывода.