linux - 在目录树中查找每个目录中的文件数

标签 linux perl sed find

我需要找出树中哪些目录中的文件最多(但不是在它们的子目录中)。目录不应计算在内。

这很容易用 bash、Perl、Python、Tcl 等解决,但是将它作为一行来解决很有趣。

我写了下面正确的一行代码

ls -Rp1 | grep -vP '\/$' | perl -pe 's/\n/ /' | perl -e '$ln=<>;@ds=split/(?=\.\/)/,$ln;for(@ds){($d,$fs)=split/:/;$fs=~s/^\s+|\s+$//;$c=split/\s+/,$fs;$fc+=$c;print "$c $d\n"}print "Totals: dirs: @{[scalar @ds]}, files: $fc\n"' | sort -n

是否有更优雅的单行解决方案来执行此操作,而不必使用 Perl?

这是多行等价物

#!/usr/bin/perl

$line = <>;
@dirs = split/(?=\.\/)/, $line;

for ( @dirs ) {
    ($dir, $files) = split /:/;
    $files =~ s/^\s+|\s+$//;
    $count = split/\s+/, $files;
    $total_files_count += $count;
    print "$count $dir\n"
}

print "Totals: dirs: @{[scalar @dirs]}, files: $total_files_count\n";

最佳答案

这行不通吗?

find . -type f | sed -e 's/[^\\/]*$//' | sort | uniq -c | sort -rn | head -10

PS:如果意图是最短的代码,您可能想发布代码高尔夫的挑战。

关于linux - 在目录树中查找每个目录中的文件数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46852881/

相关文章:

ruby - 在 Ruby 脚本中执行 shell 脚本命令

sqlplus - 定期将结果写入文件

perl - 为什么这个带有奇怪变量名的 perl 脚本有效?

linux - 使用 shell 遍历文件

awk - 使用 sed/awk 在目录之间添加栏

linux - 在 OSX 10.9 上 Pstack 进程

linux - 创建自定义 Vim 命令以在 bash 配置文件中运行函数

c - Perl 或 C 的解析速度更快吗?

sed - 使用 sed 跳过/删除非 ascii 字符

linux - CentOS 使用 sed 不工作后插入新的文本行