Initial commit

This commit is contained in:
Tilman Kranz 2022-08-27 02:01:32 +02:00
commit a363cfc3a2
2 changed files with 48 additions and 0 deletions

6
Makefile Normal file
View File

@ -0,0 +1,6 @@
PREFIX=/usr/local
BINDIR=$(PREFIX)/bin
NAME=sfind
install:
install -m 755 $(NAME) $(DESTDIR)$(BINDIR)/$(NAME)

42
sfind Executable file
View File

@ -0,0 +1,42 @@
#!/usr/bin/env perl
# Summary: Find regular files with size greater than one or between two given sizes.
# Author: Tilman Kranz
# Authoremail: t.kranz@tk-sls.de
# License: MIT License <https://opensource.org/licenses/MIT>
# Depends: libnumber-bytes-human-perl
use strict;
use warnings;
use File::Find;
use Number::Bytes::Human qw(format_bytes parse_bytes);
our $human = shift @ARGV if defined $ARGV[0] && $ARGV[0] eq '-h';
our $min = parse_bytes($ARGV[0]);
our $max = defined($ARGV[2]) ? parse_bytes($ARGV[1]) : undef;
our $dir = defined($ARGV[2]) ? $ARGV[2] : $ARGV[1];
our @warnings = ();
local $SIG{__WARN__} = sub {
push @::warnings, shift;
};
sub compare {
-f || return;
my $size = -s;
defined $::human
? printf "% 10s %s\n", format_bytes($size), $File::Find::name
: printf "% 10d %s\n", $size, $File::Find::name
if defined $::max ? ($::min <= $size <= $::max) : ($::min <= $size);
}
die "Usage: $0 [ -h ] MIN [ MAX ] DIR\n" unless
$min >= 0 &&
(!defined $max || ($max >= 0 && $min <= $max)) &&
-d $dir;
find(\&compare, $dir);
map { /^.+$/m; print STDERR $&."\n"; } @warnings;