App-finddo
view release on metacpan or search on metacpan
lib/App/finddo.pm view on Meta::CPAN
_
args => {
command => {
schema => ['array*', of=>'str*'],
pos => 0,
greedy => 1,
},
exists => {
schema => 'bool*',
},
files => {
schema => 'bool*',
cmdline_aliases => {
f => {summary => 'Shortcut for --files' , code=>sub {$_[0]{files} = 1}},
F => {summary => 'Shortcut for --no-files', code=>sub {$_[0]{files} = 0}},
},
},
dirs => {
schema => 'bool*',
cmdline_aliases => {
d => {summary => 'Shortcut for --dirs' , code=>sub {$_[0]{dirs} = 1}},
D => {summary => 'Shortcut for --no-dirs', code=>sub {$_[0]{dirs} = 0}},
},
},
smallest => {
schema => 'bool*',
},
largest => {
schema => 'bool*',
},
oldest => {
schema => 'bool*',
},
newest => {
schema => 'bool*',
},
sort => {
schema => ['str*', in=>[qw/mtime -mtime size -size name -name/]],
},
max_result => {
schema => 'int*',
cmdline_aliases => {n=>{}},
},
media => {
schema => 'bool*',
},
audio => {
schema => 'bool*',
},
video => {
schema => 'bool*',
},
image => {
schema => 'bool*',
},
# XXX add arg: doc/ebook, backup, compressed, archive
# XXX add arg: recursive (-r)
# XXX add arg: max_depth
# XXX add arg: (mtime, ctime) (min, max)
# XXX add arg: size (min, max)
},
args_rels => {
'choose_one&' => [
[qw/sort newest oldest smallest largest/],
[qw/files dirs/],
[qw/media audio video image/],
],
},
result_naked => 1,
links => [
{url=>'prog:find', summary => 'Unix command'},
],
};
sub finddo {
my %args = @_;
my $max_result = $args{max_result};
if ($args{newest} || $args{oldest} || $args{largest} || $args{smallest}) {
$max_result = 1 unless defined $max_result;
}
$max_result = -1 unless defined $max_result;
my $re_ext;
my $ext_cond;
if (defined $args{media}) {
$ext_cond = $args{media};
$re_ext = _get_ext_re_from_mime_types_file(qr!^(?:audio|video|image)/!);
} elsif (defined $args{audio}) {
$ext_cond = $args{audio};
$re_ext = _get_ext_re_from_mime_types_file(qr!^(?:audio)/!);
} elsif (defined $args{video}) {
$ext_cond = $args{video};
$re_ext = _get_ext_re_from_mime_types_file(qr!^(?:video)/!);
} elsif (defined $args{image}) {
$ext_cond = $args{image};
$re_ext = _get_ext_re_from_mime_types_file(qr!^(?:image)/!);
}
my @res;
FIND:
{
opendir my $dh, "." or do {
warn "finddo: Can't opendir: $!\n";
last FIND;
};
my @entries = readdir $dh;
closedir $dh;
ENTRY:
for my $entry (@entries) {
next if $entry eq '.' || $entry eq '..';
my @lst = lstat $entry;
my @st = $lst[2] & S_IFLNK ? stat($entry) : @lst;
if (defined $args{exists}) {
( run in 0.891 second using v1.01-cache-2.11-cpan-c966e8aa7e8 )