Czyść nazwy plików przy użyciu danych z pliku tekstowego

2

Muszę oczyścić kilka nazw plików folderów. Być może nawet tytuły plików. Obecnie używałem w tym celu skrypt Perla ale wpadłem na pewne problemy.

  1. Jeśli nazwa pliku ma już nawias w ciągu roku, dodaje kolejny zestaw.
  2. Chciałbym również użyć pliku tekstowego, aby usunąć typowe „podpisy” w tytułach, np. This.Movie.Blah.(2012) [1080p] MP4.

    Obecnie skrypt, który mam, zastępuje skrypt . z przestrzenią zgodną z przeznaczeniem i dodaje (xxxx) około roku. Rezultatem będzie uruchomienie skryptu This Movie Blah ((2012)) [1080p] MP4.

Chciałbym również usunąć „podpisy” pasujące do wartości plików tekstowych (podszyte, nie CSV) z nazwy pliku, tak This.Movie.Blah.(2012) [1080p] MP4 wróci This Movie Blah (2012)

use warnings;
use strict;
use File::Copy;

my $oldname;

opendir(my $d, ".") or die $!;
while(readdir $d) {
    if (-d $_ and $_ ne "." and $_ ne "..")
    {
        $oldname = $_;
        $_ =~ s/\./ /g;
        $_ =~ s/(\d{4})/($1)/g;
        move($oldname,$_);
    }
    }
closedir $d;

Właśnie zacząłem się uczyć dziś Perla jako jednego z moich pierwszych języków programowania, więc jestem stosunkowo nowy w tym języku.

Cole Mackenzie
źródło

Odpowiedzi:

0

Jako kwestia wyrażeń regularnych (wyszukiwanie tekstu dla wzorów i robienie zastępstw na ich podstawie), nie jest to trudne; Jestem zaskoczony, że nie ma odpowiedzi po 15 godzinach. Nie jestem tak doświadczony w Perlu, jak chciałbym być, ale prostym podejściem do problemu rok w nawiasach jest po prostu wykrycie go później i naprawienie go:

        $_ =~ s/(\d{4})/($1)/g;
        $_ =~ s/(\((\d{4})\))/$1/g;

Drugie stwierdzenie szuka ((2012)) i zwraca środkowe sześć znaków; tj (2012). Co do „wspólnych podpisów”, a co powiesz na to

        $_ =~ s/ \[1080p\] MP4$//;

? (Posługiwać się \[ i \] aby zapobiec […] z interpretacji jako zakres, i $ odnosić się do końca ciągu.

Scott
źródło