Итак, в основном у меня есть несколько файлов .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)
Проблема - все файлы переименованы с номерами, не только дубликаты.
Идеальным решением было бы добавить иерархию дат только к имени для дубликатов.
Какие-нибудь исправления в этом коде?
Заранее спасибо!
Сначала я покажу вам структуру каталогов. Я перемещаю файлы 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