按文件数量递归列出文件夹

按文件数量递归列出文件夹

是否有任何 Linux 应用程序可以查找包含最多文件的文件夹?

猴面包树按文件夹的总大小对其进行排序,我正在寻找一个按文件夹中的文件总数列出文件夹的工具。

我之所以要查看,是因为复制数以万计的小文件非常慢(比复制几个相同大小的大文件慢得多),所以我想存档或删除那些文件数量较多的文件夹,因为这会减慢复制速度(现在它不会加快速度,但当我将来需要再次移动/复制时,速度会更快)。

答案1

试用磁盘报告它也许对你有用。 文件光如果你运行的是 KDE,则是另一个。

JDiskReport 的屏幕截图

1号

答案2

Shell:按文件数排序列出目录(请参阅文章了解解释):

单行代码(用于主目录):

find ~ -type d -exec sh -c "fc=\$(find '{}' -type f | wc -l); echo -e \"\$fc\t{}\"" \; | sort -nr

脚本:

countFiles () {
    # call the recursive function, throw away stdout and send stderr to stdout
    # then sort numerically
    countFiles_rec "$1" 2>&1 >/dev/null | sort -nr
}

countFiles_rec () {
    local -i nfiles 
    dir="$1"

    # count the number of files in this directory only
    nfiles=$(find "$dir" -mindepth 1 -maxdepth 1 -type f -print | wc -l)

    # loop over the subdirectories of this directory
    while IFS= read -r subdir; do

        # invoke the recursive function for each one 
        # save the output in the positional parameters
        set -- $(countFiles_rec "$subdir")

        # accumulate the number of files found under the subdirectory
        (( nfiles += $1 ))

    done < <(find "$dir" -mindepth 1 -maxdepth 1 -type d -print)

    # print the number of files here, to both stdout and stderr
    printf "%d %s\n" $nfiles "$dir" | tee /dev/stderr
}


countFiles Home

答案3

我确信有办法通过脚本做到这一点,所以我去弄清楚了。

如果你创建了一个像这样的 bash 脚本(假设我们将其命名为‘countfiles’):

#!/bin/bash
find . -type d | while read DIR; do
ls -A $DIR | echo $DIR $(wc -w);done

然后运行它并像这样管道输出:

./countfiles | sort -n -k 2,2 > output

然后,您的输出文件将列出所有子目录,并列出其后的文件数(最后的文件数最多)。

例如,在我的 /usr 文件夹上运行上述脚本时,当我执行“tail output”时会显示此信息

./lib/gconv 249
./share/doc 273
./share/i18n/locales 289
./share/mime/application 325
./share/man/man8 328
./share/perl/5.10.1/unicore/lib/gc_sc 393
./lib/python2.6 424
./share/vim/vim72/syntax 529
./bin 533
./share/man/man1 711

可能有更好的方法来实现它;我不太擅长编写 bash 脚本 :(

答案4

尝试以下两种方法 -

1)有关树的详细输出 -

 for i in $(ls -d */); do tree  $i ; done > results.txt

输出 -

c++/
|-- 4.4
|   |-- algorithm
|   |-- array
|   |-- backward
|   |   |-- auto_ptr.h
|   |   |-- backward_warning.h
|   |   |-- binders.h
|   |   |-- hash_fun.h
|   |   |-- hash_map
|   |   |-- hash_set
|   |   |-- hashtable.h
|   |   `-- strstream
|   |-- bits
|   |   |-- algorithmfwd.h
...
38 directories, 662 files


2)关于树的使用总结——

for i in $(ls -d */); do tree $i | grep -v \\-\\-\  ; done

输出 -

arpa/

0 directories, 6 files

asm/

0 directories, 56 files

asm-generic/

0 directories, 34 files

bits/

0 directories, 103 files

c++/

38 directories, 662 files

相关内容