Как восстановить расширение файла? - PullRequest
0 голосов
/ 03 мая 2020

Поскольку я уже задавал свой вопрос на этот раз, я покажу вам, что я сделал до сих пор. Итак, в простом у меня есть папка, содержащая подпапку с разными файлами, но, в частности, некоторые из расширений файлов были ошибочно изменены, и эти файлы имеют формат .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;
}

Пожалуйста, помогите мне сейчас, я могу также дать должное объяснение объяснения того, что я сделал

...