#!/usr/bin/env perl # torn - Musical files renaming with russian language translitting # Copyright (C) 2007-2016 Sergey Matveev (stargrave@stargrave.org) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . =pod =head1 DESCRIPTION This Perl script takes directory file list and renames all files, making some substitution changes. It has some rules for musical files and rules to convert russian filenames to translit. =head1 USAGE Simply run this script in directory where you want files and/or directorires to be renamed. =head1 OVERVIEW =over 4 =item * Transliterate everything =item * Replaces spaces with underscore =item * Downcase all extensions =item * "_-_" so good looking on the screen is replaced by single dash =item * Remove spaces before and after brackets =item * Remove "[]" brackets =item * Replace ampersand with "and" word =back =head1 AUTHOR Sergey Matveev L =cut use strict; use utf8; use Encode; binmode STDOUT, ":utf8"; my $VERSION = "0.9"; my $src; my $dst; my $src_filename; print "torn version $VERSION, Copyright (C) 2007-2016 Sergey Matveev torn comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions.\n\n"; opendir DIR, "." or die "Can not open directory\n"; foreach (sort readdir DIR) { # Skip directory itself next if /^\.{1,2}$/; $src_filename = $_; $src = decode "utf-8", $src_filename; $dst = $src; # Basic corrections for music files $dst =~ s/ /_/g; $dst =~ s/_-_/-/g; $dst =~ s/_\(/\(/g; $dst =~ s/-\(/-/g; $dst =~ s/\)_/-/g; $dst =~ s/\,_/\,/g; $dst =~ s/\[//g; $dst =~ s/\]//g; $dst =~ s/\(_/\(/g; $dst =~ s/_\)/\)/g; $dst =~ s/\&/and/g; # Make translit $dst =~ y/абвгдеёзийклмнопрстуфхцьъыэ/abvgdeezijklmnoprstufhcjjye/; $dst =~ y/АБВГДЕЁЗИЙКЛМНОПРСТУФХЦЬЪЫЭ/ABVGDEEZIJKLMNOPRSTUFHCJJYE/; $dst =~ s/ж/zh/g; $dst =~ s/ч/ch/g; $dst =~ s/ш/sh/g; $dst =~ s/щ/sch/g; $dst =~ s/я/ja/g; $dst =~ s/ю/ju/g; $dst =~ s/Ж/Zh/g; $dst =~ s/Ч/Ch/g; $dst =~ s/Ш/Sh/g; $dst =~ s/Щ/Sch/g; $dst =~ s/Я/Ja/g; $dst =~ s/Ю/Ju/g; # Lowercase file extensions if($dst =~ /^(.*)\.([^\.]+)$/){ $dst = $1 . "." . lc $2; }; # Change looking of track numbers # And renaming itself if($dst =~ /^(\d+)\-(.+)$/){ print "$src -> $1.$2\n"; rename $src_filename, "$1.$2"; } else { print "$src -> $dst\n"; rename $src_filename, $dst; }; }; closedir DIR;