Перейменуйте файли з in1.jpg, in2.jpg, in3.jpg тощо на out0001.jpg, out0002.jpg, out0003.jpg тощо, використовуючи сценарій perl `перейменувати`


0

Я хотів би перейменувати велику кількість файлів з іменами in1.jpg, in2.jpg, in3.jpg і т. Д. На out0001.jpg, out0002.jpg, out0003.jpg тощо. Вдячний, якщо хтось запропонував би рішення, використовуючи сценарій perl rename(або prename), що постачається з розподілом perl.


1
Ви вже намагалися вирішити це самостійно? Де ти застряг?
slhck

Чому саме все-таки перл?
хаджва

@khajvah Я здійснив пошук суперрусера і знайшов досить багато відповідей на подібні запитання, використовуючи bash та цикл для кожного імені файлу. Я думаю, що renameтреба працювати і було б елегантніше; тільки що я не знаю достатньо регексу.
стл

@slchk Мене зациклювались на тому, як передати відповідну рядок на рядок заміни. Я більше експериментував і знайшов rename 's/in([1-9]).jpg/out000\1.jpg/' *.jpg. Напевно, є більш елегантні рішення. Перл, TMTOWTDI. :-)
стл

Строго кажучи, це незначна зміна на єдиному прикладі на renameсторінці man.
MariusMatutiae

Відповіді:


0

Просто для розваги та безкоштовно ...

Я б використовував посилання для збереження оригінальних імен, але ви можете змінити команду link ( ln) на команду move ( mv), якщо бажаєте (додано як коментар):

#!/usr/bin/perl
    # Creates link files with ascending sequence numbers ($USE_SEQ=1) or original numbers
    # ($USE_SEQ=0):
    $USE_SEQ       = 1;

    unless(opendir(DIRECTORY,".")) { die "Unable to open current directory.\n"; }
    @files = readdir(DIRECTORY);
    closedir(DIRECTORY);

    $seqnum = 1;
    foreach $file (@files) {
        if ($file =~ /\.jpg$/i) {
            ($number) = ($file =~ /(\d+).jpg/i);
            $number = $seqnum++ if $USE_SEQ;
            $padded_number = sprintf "%05d", $number;
            $padded_name = "out" . $padded_number . ".jpg";
            `ln -s "$file" $padded_name`;
            # `mv "$file" $padded_name`;  # untested
        }
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.