ฉันพยายามเขียนเชลล์ไปป์ไลน์ที่มีประสิทธิภาพ แต่มันก็ไม่สะดวกและช้าหรือไม่ถูกต้องเช่น
find . -depth -printf '%h\n' | uniq -c | awk '$1>1000'
จะแสดงรายการไดเรกทอรีใบไม้ (และบางรายการ) ที่มีไฟล์มากกว่า 1,000 ไฟล์ ดังนั้นนี่คือสคริปต์ Perl เพื่อให้มีประสิทธิภาพทั้งในเวลาและ RAM ผลผลิตก็เหมือนกัน
« files-in-subtree »« files-direct-in-directory »« directory-name »
เพื่อให้คุณสามารถนวดและกรองได้อย่างง่ายดายโดยใช้เครื่องมือปกติเช่น sort (1) หรือ awk (1) ดังที่กล่าวมา
#! /usr/bin/perl -w
# Written by Kjetil Torgrim Homme <kjetil.homme@redpill-linpro.com>
use strict;
use File::Find;
my %counted;
my %total;
sub count {
++$counted{$File::Find::dir};
}
sub exeunt {
my $dir = $File::Find::dir;
# Don't report leaf directories with no files
return unless $counted{$dir};
my $parent = $dir;
$parent =~ s!/[^/]*$!!;
$total{$dir} += $counted{$dir};
$total{$parent} += $total{$dir} if $parent ne $dir;
printf("%8d %8d %s\n", $total{$dir}, $counted{$dir}, $dir);
delete $counted{$dir};
delete $total{$dir};
}
die "Usage: $0 [DIRECTORY...]\n" if (@ARGV && $ARGV[0] =~ /^-/);
push(@ARGV, ".") unless @ARGV;
finddepth({ wanted => \&count, postprocess => \&exeunt}, @ARGV);