我需要找出树中哪些目录中的文件最多(但不是在它们的子目录中)。目录不应计算在内。
这很容易用 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/