【发布时间】:2018-04-01 20:21:41
【问题描述】:
我需要找出树中的哪些目录包含最多的文件(但不是在它们的子目录中)。不应计算目录。
这很容易用 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";
【问题讨论】:
-
所以您需要从您的层次结构的顶层为每个目录及其所有子目录的总计数文件(不是子目录)? (或者递归地计算每个目录中的文件数?)
-
我需要给定目录树中每个目录中的文件计数。不是目录及其所有子目录中的文件数 - 这无助于查找文件数量最多的目录。
-
您的问题应该只包含与问题相关的信息。如果您想对某个答案发表评论,则应在该答案下方添加评论。
-
@Borodin 仅供参考:您的编辑完全改变了我的问题的含义。因此,现在这个问题不仅丢失了一些有用的代码( 与问题相关),而且标记的答案和我最初的示例都不再回答问题,完全做某事 其他。非常感谢!
-
@jcaron:你的评论显然不是“只是为了[我的]信息”,讽刺是不必要的粗俗。我试图澄清你的问题,因为我发现它很难理解。如果我弄错了,我会道歉,但我删除的唯一代码应该是对答案的评论的一部分,根本没有添加到问题中。请解释我如何歪曲你的问题,以便我可以解决它。