Поскольку я уже задавал свой вопрос на этот раз, я покажу вам, что я сделал до сих пор. Итак, в простом у меня есть папка, содержащая подпапку с разными файлами, но, в частности, некоторые из расширений файлов были ошибочно изменены, и эти файлы имеют формат .jpg .gif .png. Теперь я хочу восстановить их исходное расширение, не касаясь других файлов.
Теперь я понял, как определить тип файла со следующим кодом
my $ft = File::Type->new();
# reading data
my $type_from_data = $ft->checktype_contents($data);
# Here I am checking file from disk
my $type_from_file = $ft->checktype_filename($file);
# here I am Checking files and data
my $type_1 = $ft->mime_type($file);
my $type_2 = $ft->mime_type($data);
Теперь, как мне изменить расширения файла, как сейчас я определил тип файла и не касаясь других файлов, нужно изменить только расширение файла изображения.
Я также знаю, как уникально переименовать файлы с помощью следующего кода:
#!/usr/bin/perl
use warnings;
use strict;
use autodie;
use File::Copy;
my $this_file = (split(/\//, $0))[-1];
print "skipping file: $this_file\n";
my $oldnames = "/some/path/to/oldnames";
my $newnames = "/some/path/to/newnames";
# Opening the directory
opendir(my $dh, $oldnames);
# greping out all directories and possibly this script.
my @files_to_rename = grep { !-d && $_ ne $this_file } readdir $dh;
closedir $dh;
# create hash of file names from lists:
my @old_filenames = qw(file1 file2 file3 file4);
my @new_filenames = qw(onefile twofile threefile fourfile);
my $filenames = create_hash_of_filenames(\@old_filenames, \@new_filenames);
my @missing_new_file = ();
for my $file (@files_to_rename) {
if( exists($filenames->{$file}) ) {
copy($file, "$newnames/$filenames->{$file}");
} else {
push @missing_new_file, $file;
}
}
if( @missing_new_file ) {
print "Could not map files:\n",
join("\n", @missing_new_file), "\n";
}
sub create_hash_of_filenames {
my ($oldnames, $newnames) = @_;
my %filenames = ();
for my $i ( 0 .. (scalar(@$oldnames) - 1) ) {
$filenames{$$oldnames[$i]} = $$newnames[$i];
}
# see Dumper output below, to see data structure
return \%filenames;
}
Пожалуйста, помогите мне сейчас, я могу также дать должное объяснение объяснения того, что я сделал