SHELL = /bin/bash
.PHONY: run
run: compare
$(MAKE) glob > /dev/null
$(MAKE) readdir > /dev/null
$(MAKE) path > /dev/null
.PHONY: prepare
prepare:
gen.sh
.PHONY: clean
clean:
rm -rf {100..200}
.PHONY: glob
glob:
time glob.pl
.PHONY: readdir
readdir:
time readdir.pl
.PHONY: path
path:
time path.pl
.PHONY: compare
compare:
diff <(glob.pl | sort) <(readdir.pl | sort)
diff <(glob.pl | sort) <(path.pl | sort)
####
#! /bin/bash
now=$(date +%s)
yday=$(date -d yesterday +%s)
tmrw=$(date -d tomorrow +%s)
mkdir {100..200}
for d in {100..200} ; do
for r in {1..250} ; do
mkdir $d/$(date +%Y%m%d -d @$((yday-10000*RANDOM)))
done 2>/dev/null
mkdir $d/$(date +%Y%m%d -d @$((tmrw+10*RANDOM)))
for r in {1..250} ; do
mkdir $d/$(date +%Y%m%d -d @$((yday-10000*RANDOM)))
done 2>/dev/null
echo $d >&2
done
####
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
use Time::Piece;
my $now = localtime->ymd("");
for my $dir (glob '???/') {
say substr +(glob "$dir*/")[-1], 0, -1;
}
####
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
use Time::Piece;
use Path::Tiny qw{ path };
my $now = localtime->ymd("");
for my $dir (grep $_->is_dir, path('.')->children) {
for my $date (grep $_->is_dir, $dir->children) {
say $date if $date->basename > $now;
}
}
####
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
use Time::Piece;
my $now = localtime->ymd("");
opendir my $dir, '.' or die $!;
while (my $pdir = readdir $dir) {
next if $pdir =~ /^\.{1,2}$/ || ! -d $pdir;
opendir my $ddir, $pdir or die $!;
while (my $date = readdir $ddir) {
next if $date =~ /^\.{1,2}$/ || ! -d $dir;
say "$pdir/$date" if $date > $now;
}
}
####
make glob > /dev/null
real 0m0.109s
user 0m0.054s
sys 0m0.053s
make readdir > /dev/null
real 0m0.074s
user 0m0.045s
sys 0m0.029s
make path > /dev/null
real 0m0.440s
user 0m0.380s
sys 0m0.060s