Поиск всех файлов изображений в папке и изменение их имен с помощью номера - PullRequest
0 голосов
/ 17 декабря 2018

Предположим, у нас есть следующие файлы.

00043.jpg

00086.jpg

00123.jpg

...

04523.jpg

Я хочу изменить их имена на следующие.

00001.jpg

00002.jpg

00003.jpg

и т. Д.

Как я могу это сделать на консоли Linux?Или я могу использовать скрипты Python.

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Если у вас в консоли PHP,

<?php
$images = glob("*.jpg");

$start=0;
function squencer()
{
    global $start;
    ++$start;

    return str_pad($start, 5, "0", STR_PAD_LEFT);
}

foreach($images as $image)
{
    $newname = squencer().".jpg";
    rename($image, $newname);
}

Затем выполните: php -f rename.php

0 голосов
/ 16 февраля 2019

Единственная стандартная команда для переименования файлов - это mv, и она имеет очень ограниченные возможности.То, что вы хотите сделать, по сути требует сценария, потому что сложность последовательного именования находится за пределами возможностей глобализации или даже регулярных выражений.Вы не указали, есть ли в каталоге другие файлы или вас интересует исходный порядок.В отличие от Windows, содержимое каталога Linux не находится в каком-либо предсказуемом порядке.Я предполагаю, что вы хотите сохранить первоначальный порядок.Ваш пример указывает на 0-отступ.Это важная деталь.Это означает, что лексическая сортировка соответствует тому, что мы интуитивно думаем, например, 43> 42. Лексически, 43> 42, но 42> 043. Я собираюсь показать вам, как это сделать с помощью Python, предполагая, что каталог содержит другие файлы ичто вы хотите сохранить первоначальный порядок.Первая строка - это шебанг, указывающий ОС использовать python3.Это в особенности для Ubuntu, но большинству систем потребуется это или его вариант, потому что они используют python 2 по умолчанию.Кроме того, хотя Python не заботится о том, какие типы окончаний строк присутствуют в сценарии, сама ОС считывает shebang и требует, чтобы они были Unix.

#!/usr/bin/env python3
import os
jpgfiles = [f for f in os.listdir() if os.path.splitext(f)[1].casefold() == jpg']
jpgfiles.sort()
for i,f in enumerate(jpgfiles) :
    os.rename(f, '%04.d' % i + '.jpg')

Присущие Python возможности включают простой сценарий, подобный этомувыполнять довольно сложные операции.Но вам не нужно писать скрипт для каждого вида переименования файлов, который вы захотите сделать.Когда я не смог найти существующую программу для разнообразного переименования, которую я делаю, я написал программу на Python, которая может делать то, что вы хотите, и многое другое.Это rene.py.Вы можете получить его на Sourceforge https://rene -file-renamer.sourceforge.io .Это бесплатный и открытый исходный код (GNU GPL v3.0).Команда сделать то, что вы хотите, это rene * .jpg: .jpg I /// 5.

0 голосов
/ 17 декабря 2018

Укажите правильный путь к папке и запустите этот код.

import os 

# Function to rename multiple files 
def main(): 
    i = 0
    path = 'E:\\files\\'    
    for filename in os.listdir("E:\\files"): 
        dst = str(i).zfill(4) + ".jpg"
        src = path + filename 
        dst = path + dst 

        # rename() function will 
        # rename all the files 
        os.rename(src, dst) 
        i += 1

# Driver Code 
if __name__ == '__main__': 

    # Calling main() function 
    main() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...