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

Я получил его с помощью следующего:

ftp -inv <<EOF
open app.server.address
user username password
cd some/location
get filename
bye
EOF

ftp -i опция выключает интерактивный запрос и -n отключает автовход в систему наряду с подсказками имени пользователя и пароля.

3
25.09.2016, 20:11
4 ответа

Так как вы хотите расшифровать с вывода, которые у вас есть, мы постараемся упростить вещи.

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
drwxr-xr-x 12 root root 4096 Nov 11 14:42 .

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

P.S. Это часто плохое представление о том, чтобы разбирать что-то из LS , так как он не является надежным. Использовать Найти с с -MaxDepth вместо этого, если у вас есть шанс использовать его.

3
27.01.2020, 21:19

Я не знаю, достаточно ли этого для ответа, но

grep -w "/opt/gnome"

удовлетворит вашу потребность.

echo '/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome' | grep -w "/opt/gnome" -o
/opt/gnome
echo '/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome' | grep -w "/opt/gnome" -o
/opt/gnome

, но

echo '/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome' | grep "/opt/gnome" -o
/opt/gnome
/opt/gnome
-121--42399-

Можно также использовать

эхо «$ PATH» | tr ': '\n' | grep -x «/opt/gnome »

, которое разделяет переменную path на отдельные строки (по одной на путь), поэтому grep -x может искать точные результаты. Это, конечно, имеет недостаток, заключающийся в необходимости дополнительного процесса для tr . И она не будет работать, если имя папки в PATH содержит символы новой строки.

-121--42398-

Если вы можете использовать ls , то я предполагаю, что вы также можете использовать функцию builtin 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 параметров настройки будет иметь эффект только внутри этой функции и не имеет других побочных эффектов.

1
27.01.2020, 21:19

Можно объединить пару подходов

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

    ls -l | grep "^-". | wc -l
    
  2. Пройдитесь по подкаталогам

    найдите ./подкаталог -тип d
    
  3. собрать в одну команду

     найти ./подкаталог -тип d | xargs -I{} sh -c "ls -l" {} | grep -c '^-'"
    

В результате рекурсивного подсчета файлов в каталогах произойдет рекурсивное переустановка.

Конечно, есть несколько способов претендовать на результат или обогатить его.

0
27.01.2020, 21:19

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

ls -A1 | wc -l
0
27.01.2020, 21:19

Теги

Похожие вопросы