Подсчет файлов в листах дерева каталогов

Зависит от использования и ОС действительно.

На моем основном рабочем столе мне разделяли пространство между / и другой раздел, который я сохраняю своими документами/музыкой и т.д. С тех пор / домой будет иметь пользовательскую конфигурацию и наполнит там, я не сохранил бы ее в целости между установками, просто символьная ссылка мои папки документа/музыки в мой homedir.

4
17.10.2011, 23:50
2 ответа

попробуйте это:

for dir in $( gfind . -type d -print ); do files=$( find $dir -maxdepth 1 -type f | wc -l ); echo "$dir : $files"; done

или, в сценарии, где у Вас может быть немного больше гибкости:

#!/usr/bin/ksh

# pass in the directory to search on the command line, use $PWD if not arg received
rdir=${1:-$(pwd)}

# if $rdir is a file, get it's directory
if [ -f $rdir ]; then
    rdir=$(dirname $rdir)
fi

# first, find our tree of directories
for dir in $( gfind $rdir -type d -print ); do
    # get a count of directories within $dir.
    sdirs=$( find $dir -maxdepth 1 -type d | wc -l );
    # only proceed if sdirs is less than 2 ( 1 = self ).
    if (( $sdirs < 2 )); then 
        # get a count of all the files in $dir, but not in subdirs of $dir)
        files=$( find $dir -maxdepth 1 -type f | wc -l ); 
        echo "$dir : $files"; 
    fi
done

Я использую ksh для сценариев оболочки, но он работает точно также с #!/usr/bin/zsh, или /usr/bin/bash.

3
27.01.2020, 20:54
  • 1
    Спасибо @Tim. Что gfind? –  Amelio Vazquez-Reina 18.10.2011, 01:21
  • 2
    находит. некоторые системы (как Солярис), которые используют их собственную реализацию находки, сделайте инструменты GNU доступными путем добавления префикса их g. как в, gfind, gmake, gfind, и т.д. Для использования на Linux или другом, который значение по умолчанию к версиям GNU инструментов, просто изменение gfind кому: find. –  Tim Kennedy 18.10.2011, 06:18
  • 3
    Спасибо @Tim. Сценарий выше файлов количества только на тех папках, которые являются листами дерева каталогов? (т.е. папки, которые не имеют никаких подпапок)? Похоже, что это считает файлы на каждую подпапку. –  Amelio Vazquez-Reina 18.10.2011, 18:06
  • 4
    @intrpc, ах, извините. я печатал общие количества для всех файлов каталогом. Я отредактировал его, чтобы только распечатать количество файлов только для каталогов, которые самостоятельно не включают другой каталог. –  Tim Kennedy 19.10.2011, 00:13

быстрый 'n' грязный

find . -type d | \
while IFS= read -r d; do
    f=$(ls -F "$d");
    echo "$f" | egrep -q "/$" || \
        echo $d : $(echo -n "$f"|wc -l) files;
done
2
27.01.2020, 20:54
  • 1
    ! путь, более изящный, чем мой, и, дает точно тот же вывод (если Вы просто подкачиваете find . -type d с find ${1:-$(pwd)} -type d ). –  Tim Kennedy 19.10.2011, 20:29
  • 2
    @TimKennedy, спасибо. Это не сценарий, хотя, просто острота, вот почему 1$ не принят для учета. –  forcefsck 20.10.2011, 11:00

Теги

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