从多个文件夹中递归查找和复制文件

Recursively find and copy files from many folders

我想从多个文件夹中递归搜索数组中的一些文件

文件名数组的示例是 ['A_010720_X.txt','B_120720_Y.txt']

文件夹结构的示例如下所示,我也可以将其作为数组提供,例如 ['A','B'] 和 ['2020-07-01','2020-07-12 ']. “DL”对所有人都保持不变。

C:\A20-07-01\DL C:\B20-07-12\DL

等等

我曾尝试使用 shutil,但它似乎无法有效满足我的要求,因为我只能传递完整的文件名,而不能传递通配符。我与 shutil 一起使用的代码有效但没有通配符并且具有绝对完整的文件名和路径例如下面的代码只会给我 A_010720_X.txt

我相信要走的路是使用我以前没有使用过的 glob 或 pathlib,或者找不到一些类似于我的用例的好例子

    import shutil
    filenames_i_want = ['A_010720_X.txt','B_120720_Y.txt']
    RootDir1 = r'C:\A20-07-01\DL'
    TargetFolder = r'C:\ELK\LOGS\ATH\DEST'
    for root, dirs, files in os.walk((os.path.normpath(RootDir1)), topdown=False):
        for name in files:
            if name in filenames_i_want:
                print ("Found")
                SourceFolder = os.path.join(root,name)
                shutil.copy2(SourceFolder, TargetFolder) 

假设它们都是 .txt 文件,我认为这应该可以满足您的需求。

import glob
import shutil

filenames_i_want = ['A_010720_X.txt','B_120720_Y.txt']
TargetFolder = r'C:\ELK\LOGS\ATH\DEST'
all_files = []
for directory in ['A', 'B']:
    files = glob.glob('C:\{}\*\DL\*.txt'.format(directory))
    all_files.append(files)
for file in all_files:
    if file in filenames_i_want:
        shutil.copy2(file, TargetFolder)