Это сложно. Мне нужно сделать следующее, используя 2 папки, папку с фильмами и папку с субтитрами:
Поиск каждого фильма в папке фильма, для каждого найденного файла, захват имени файла и попробуйте найти его в папке субтитров.
Если файл найден, ничего не делать. Если файл не найден, выведите имя файла в файл журнала, который соберет все фильмы без субтитров.
Папка фильма имеет следующий формат:
/ Фильмы
/ Фильмы / SomeMovieFolder1
/ Фильмы / SomeMovieFolder2
/ Фильмы / SomeMovieFolder3
/Movies/SomeMovieFolder…
/ Movies / SomeMovieFolderN
И внутри каждого movieFolder находится фактический фильм (Каждый фильм находится в отдельной папке внутри папки Movie.
Папка субтитров содержит все субтитры в одном месте. В папка с субтитрами.
Мое мышление было бы 2 find
командами, зацикленными вместе, используя время. Это был бы сценарий оболочки (bash).
Фильмы - MP4 или MKV форматы. Субтитры имеют формат SRT .
Если имена файлов фильмов и субтитров совпадают, и отличаются только расширения, должно сработать что-то подобное.
#!/bin/bash
movie_dir=~/Movies
subtitle_dir=~/Subtitles
log=~/log.txt
for i in "$movie_dir"/*;do
filname="${i%.*}"
if [ ! -e "$subtitle_dir/$filename.srt" ];then
echo "$filename" >> "$log"
fi
done
РЕДАКТИРОВАТЬ Если каждый файл фильма находится в отдельной папке, попробуйте:
#!/bin/bash
movie_dir=~/Movies
subtitle_dir=~/Subtitles
log=~/log.txt
find "$movie_dir" -type f -name "*.mp4" -o -name "*.mkv" | while read i;do
filename="$(basename "${i%.*}")"
if [ ! -e "$subtitle_dir/$filename.srt" ];then
echo "$filename" >> "$log"
fi
done
Этот второй способ должен работать независимо от структуры папки фильма, опять же, пока так как имена файлов совпадают.
#!/usr/bin/perl -w
use strict;
use File::Find;
use File::Basename qw( basename );
my $movies_dir = "/home/user/movies";
my $subs_dir = "/home/user/subs";
my $log = "./movie-log";
my %options;
my %subs = map { basename($_) =~ s/\.[^.]+$//r, 1 } <$subs_dir/*>;
open LOG, '>>', $log or die "Can't open $log: $!\n";
$options{wanted} = sub {
my $movie = s/\.[^.]+$//r;
if ( -f && /\A.*\.(mp4|mkv)\z/i ) {
exists $subs{$movie} or
print LOG "$_\n";
}
};
$options{preprocess} = sub {
sort @_;
};
find (\%options, $movies_dir);
__END__
Сценарий создаст названный файл журнала movie-log
в текущем каталоге, содержа названия фильмов, который не имеет подзаголовков.