Перемещайте определенные файлы по расширению в папку и переименовывайте дубликаты, если они есть

Итак, в основном у меня есть несколько файлов .txt в папках и подпапках, которые я хочу переместить в новую папку.

Хотя некоторые файлы имеют одно и то же имя, они могут иметь разное содержимое, поэтому я хотел бы оставить их все, но переименовывать.

Что я использовал:

#!/usr/bin/env python3

import os
import shutil

source_dir = "/home/source_folder"; target_folder = "/home/target_folder"; extensions = (".txt",)

dup = 1
for root, dirs, files in os.walk(source_dir):
    for name in files:
        if name.endswith(extensions):
            file = root+"/"+name
            while os.path.exists(target_folder+"/"+name):
                name = name[:name.rfind(".")]+"_"+str(dup)+name[name.rfind("."):]
                dup = dup+1
            shutil.move(file, target_folder+"/"+name)

Проблема - все файлы переименованы с номерами, не только дубликаты.
Идеальным решением было бы добавить иерархию дат только к имени для дубликатов.

Какие-нибудь исправления в этом коде?

Заранее спасибо!

1
задан 12 December 2020 в 17:24

1 ответ

Сначала я покажу вам структуру каталогов. Я перемещаю файлы txt из src1 в dest1

.
├── dest1
└── src1
    ├── abc.txt
    ├── adx.txt
    ├── logs
    │   ├── nft.txt
    │   ├── orm.txt
    │   └── yuy
    ├── lol
    ├── nft.txt
    ├── orm.txt
    └── yuy

.Вы можете использовать команду

find src1/ -regextype sed -regex '.*/*\.txt' -exec mv --backup=t -t dest1/ {} +

Где src1 — исходная папка, содержащая txt и dst1 — это папка назначения. Если файл с таким именем уже существует, к имени файла будет добавлен суффикс .~1~

.
├── dest1
│   ├── abc.txt
│   ├── adx.txt
│   ├── nft.txt
│   ├── nft.txt.~1~
│   ├── orm.txt
│   └── orm.txt.~1~
└── src1
    ├── logs
    │   └── yuy
    ├── lol
    └── yuy
0
ответ дан 12 December 2020 в 17:03

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

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