App-perlmv-scriptlet-according_to_containing_dir

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN


VERSION
    This document describes version 0.001 of
    App::perlmv::scriptlet::according_to_containing_dir (from Perl
    distribution App-perlmv-scriptlet-according_to_containing_dir), released
    on 2023-10-26.

DESCRIPTION
    In addition to renaming the file according to the name of its container
    directory, if the file does not have an extension yet, an extension will
    be given by guessing according to its MIME type using
    File::MimeInfo::Magic, similar to what the
    "add_extension_according_to_mime_type" scriptlet does.

ENVIRONMENT
  DEBUG
    Bool. If set to true, will print debugging messages to stderr.

HOMEPAGE
    Please visit the project's homepage at
    <https://metacpan.org/release/App-perlmv-scriptlet-according_to_containi

lib/App/perlmv/scriptlet/according_to_containing_dir.pm  view on Meta::CPAN

our $DATE = '2023-10-26'; # DATE
our $DIST = 'App-perlmv-scriptlet-according_to_containing_dir'; # DIST
our $VERSION = '0.001'; # VERSION

our $SCRIPTLET = {
    summary => q[Rename file according to its containing directory's name, e.g. foo/1.txt to foo/foo.txt, or foo/somejpeg to foo/foo.jpg],
    description => <<'MARKDOWN',

In addition to renaming the file according to the name of its container
directory, if the file does not have an extension yet, an extension will be
given by guessing according to its MIME type using <pm:File::MimeInfo::Magic>,
similar to what the `add_extension_according_to_mime_type` scriptlet does.

MARKDOWN
    code => sub {
        package
            App::perlmv::code;

        # we skip directories
        if (-d $_) {
            warn "Directory '$_' skipped\n";
            return;
        }

        # guess file extension
        my ($ext) = /\.(\w+)\z/;
      GUESS_EXT: {
            if (defined $ext) {
                warn "DEBUG: File '$_' already has extension '$ext', skipped guessing extension\n" if $ENV{DEBUG};
                last;
            }

            require File::MimeInfo::Magic;

            my $arg;
            if (-l $_) { open my $fh, "<", $_ or do { warn "Can't open symlink $_: $!, skipped\n"; return }; $arg = $fh } else { $arg = $_ }
            my $type = File::MimeInfo::Magic::mimetype($arg);
            unless ($type) {
                warn "Can't get MIME type from file '$_', skipped guessing extension\n";
                last;
            }
            my @exts = File::MimeInfo::Magic::extensions($type) or die "Bug! extensions() does not return extensions for type '$type'";
            warn "DEBUG: extensions from extensions($type) for file '$_': ".join(", ", @exts)."\n" if $ENV{DEBUG};

            $ext = $exts[0];
        } # GUESS_EXT

        # determine the container directory's name
        no warnings 'once';

lib/App/perlmv/scriptlet/according_to_containing_dir.pm  view on Meta::CPAN

App::perlmv::scriptlet::according_to_containing_dir - Rename file according to its containing directory's name, e.g. foo/1.txt to foo/foo.txt, or foo/somejpeg to foo/foo.jpg

=head1 VERSION

This document describes version 0.001 of App::perlmv::scriptlet::according_to_containing_dir (from Perl distribution App-perlmv-scriptlet-according_to_containing_dir), released on 2023-10-26.

=head1 DESCRIPTION

In addition to renaming the file according to the name of its container
directory, if the file does not have an extension yet, an extension will be
given by guessing according to its MIME type using L<File::MimeInfo::Magic>,
similar to what the C<add_extension_according_to_mime_type> scriptlet does.

=head1 ENVIRONMENT

=head2 DEBUG

Bool. If set to true, will print debugging messages to stderr.

=head1 HOMEPAGE



( run in 0.508 second using v1.01-cache-2.11-cpan-39bf76dae61 )