按扩展名将特定文件移动到文件夹中,并重命名重复项(如果有)

按扩展名将特定文件移动到文件夹中,并重命名重复项(如果有)

所以基本上我在文件夹和子文件夹中有多个 .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

首先,我将向您展示目录结构。我将txt文件从移动src1dest1

.
├── 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的源文件夹,是目标文件夹。如果存在同名文件,则文件名将以txtdst1.~1~

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

相关内容