App-perlmv-scriptlet-according_to_containing_dir
view release on metacpan or search on metacpan
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 )