Подсчет файлов в дереве каталогов [дубликат]

Переустановите два пакета, содержащие libprotobuf.so.8, libprotobuf-c.so.0

apt-get install --reinstall libprotobuf8 libprotobuf-c0

Если Ubuntu sudo apt-get install --reinstall libprotobuf8 libprotobuf-c0

0
08.07.2017, 16:42
3 ответа

Вероятно, вы захотите просто использовать find. Предполагая, что у вас нет файлов с новыми строками в именах, подойдет что-то вроде этого:

find "$dir" -type f | wc -l

-type fсоответствует обычным файлам, но не каталогам, каналам, сокетам или чему-либо еще.

Обычный вывод findразделяет имена файлов символами новой строки, поэтому, если какое-либо из имен содержит символы новой строки, вывод будет неоднозначным. С GNU find будет работать что-то вроде этого:

find "$dir" -type f -printf. | wc -c

Это findпечатает только точку для каждого файла и подсчитывает точки.

В других версиях find-printfнет, но мы можем использовать прием передачи входного пути с двойной косой чертой. Они обрабатываются как одна косая черта, но в противном случае они не будут естественным образом отображаться в выходных данных, поскольку имена файлов не могут содержать косые черты. Затем подсчитайте двойные косые черты -в выводе :

.
find "$dir//" -type -f | grep -c //

Если мы хотим сделать это исключительно с помощью сценария оболочки, перечислите имена файлов, нет необходимости использовать ls, например. в Баше:

#!/bin/bash
files=0
shopt -s dotglob
countfiles() {
        local f;
        for f in * ; do 
                if [ -f "$f" ] ; then          # count regular files
                        files=$((files + 1))
                elif [ -d "$f" ] ; then        # recurse into directories
                        cd "$f"
                        countfiles
                        cd..
                fi
        done
}
cd "$1"
countfiles
echo $files
6
28.01.2020, 02:14

Вы можете получить количество файлов в каталоге и подкаталогах, используя:

 find path_to_directory -type f | wc -l
1
28.01.2020, 02:14

Why does it always count the files +1 except for the master directory?

Причина ls -la также добавляет строку total 20к выходным данным. Я вижу, что для «главного» каталога также отображается значение +1.

Why does it count anything in the '.config' directory, as there are no files in there?

По той же причине. total..строка, созданная ls.

How can I fix this?

Не используйте свой скрипт :)Я имею в виду на самом деле, это слишком сложно. У нас тут хороший find. Весь ваш скрипт превратится во что-то вроде этого (, если вам нужны файлы на каталог):

find $yourdir -type d | while read dir ; do 
    echo "$dir == $(find $dir -maxdepth 1 -type f | wc -l) files" ; 
done

или просто (, если вам нужно значение суммы):

find $yourdir -type f | wc -l
0
28.01.2020, 02:14

Теги

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