Переименование файлов в разных каталогах с одинаковым именем, поэтому каждый имеет уникальное (пронумерованное) имя

Мне нужно переименовать файлы на SD-карте, чтобы иметь возможность скопировать содержимое нескольких подпапок на мой HDD. Сначала мне нужно найти их по их расширению .MOD (я могу сделать это с помощью find ./path/*.MOD2, так как они находятся в разных каталогах).

Мне нужно переименовать их, потому что у всех их есть имена, такие как MOV001.MOD, MOV002.MOD, в другом каталоге находятся другие видеоролики, но аналогично названы. Это было создано моей камерой. После переименования я мог бы скопировать их по одной команде на мой жесткий диск.

Из-за их фактических имен, когда я использую cp ./path/*.MOD new-path, результатом будет то, что я перезаписываю файлы с одинаковым именем.

Как я могу это решить?

1
задан 23 December 2017 в 11:16

1 ответ

Вы можете скопировать их из рекурсивного каталога (включая все подкаталоги), найти расширение и переименовать их в один шаг со сценарием ниже.

Взятый из сценариев, которые я использую, чтобы не перезаписывать файлы при копировании из рекурсивного каталога:

#!/usr/bin/env python3
import os
import shutil
import sys

dr = sys.argv[1]
new_dir = sys.argv[2]

for root, dirs, files in os.walk(dr):
    for name in files:
        if name.lower().endswith(".mod"): # for your extension
            n = 1; name_orig = name
            while os.path.exists(new_dir+"/"+name):
                name = "duplicate_"+str(n)+"_"+name_orig
                n = n+1
            newfile = new_dir+"/"+name
            shutil.copy(root+"/"+name_orig, newfile)

Скопируйте сценарий в пустой файл, сохраните его как nodupes.py, запустите его с исходными данными (source-) и выведите каталог в качестве аргументов:

python3 /path/to/nodupes.py /path/to/sourcedir /path/to/outputdir

Он переименует аналогичные именованные файлы, такие как:

Конечно, вместо duplicate_, сценарий можно изменить, чтобы использовать что-либо пронумерованное (или просто числа).

Обобщенная версия not , которая ищет только одно расширение, будет:

#!/usr/bin/env python3
import os
import shutil
import sys

dr = sys.argv[1]
new_dir = sys.argv[2]

for root, dirs, files in os.walk(dr):
    for name in files:
        n = 1; name_orig = name
        while os.path.exists(new_dir+"/"+name):
            name = "duplicate_"+str(n)+"_"+name_orig
            n = n+1
        newfile = new_dir+"/"+name
        shutil.copy(root+"/"+name_orig, newfile)
1
ответ дан 23 May 2018 в 04:26
  • 1
    Спасибо, я попытаюсь использовать ваш скрипт в качестве другого метода выполнения работы. – Mikulas Kuzmiak 8 November 2016 в 02:09

Другие вопросы по тегам:

Похожие вопросы: